od = input('przedzial od: ');
do = input('przedzial do: ');
x = od : 0.1 : do;
y = str2func(['@(x)' input('Podaj wielomian: ','s')]);
x_0 = input('Podaj przyblizone miejsce zerowe: ');
miejsceZerowe = fzero(y, x_0);
Tyle, że tutaj \(\displaystyle{ y}\) jest funkcją, bo tego wymaga fzero. Natomiast do użycia plot potrzebujesz podać wektor liczb, a nie funkcję, więc przy pomocy tej funkcji możesz utworzyć taki wektor, aby przekazać go następnie do funkcji plot.
, teraz działa wszytko, zarówno min, max, plot jak i fzero. Możesz mi teraz wytłumaczyć jak to działa, bo ja nie mam zielonego pojęcia co tam się dzieje
x = -5 : 0.1 : 5;
y = input('Podaj wielomian: '); % niech bedzie np (x-0.15).^3
tutaj x jest macierzą (wektorem ?) 100 elementową, za to nie wiem czym jest y, komputer tutaj utworzył macierz [y] również 100 elementową z wartosciami \(\displaystyle{ y_i = f(x_i)}\) czy może jest to po prostu funkcja (nie w pojęciu matlaba tylko zwykłym)
1) Najłatwiej chyba będzie to pokazać na przykładzie prostej funkcji
Załóżmy, że input zwraca 2*x. Wtedy otrzymujesz str2func(['@(x)' '2*x']), co jest z kolei równoważne str2func('@(x) 2*x'), a to z kolei jest równoważne @(x) 2*x czyli już nie string ale funkcja. W taki sposób tworzy się w matlabie funkcję anonimową (więcej o tym możesz przeczytać tutaj: ), która bierze \(\displaystyle{ x}\) jako swój argument i jej wartością dla tego argumentu jest \(\displaystyle{ 2 \cdot x}\).
2) Tak, \(\displaystyle{ x}\) jest wektorem \(\displaystyle{ 100}\)-elementowym. W przypadku tego kodu \(\displaystyle{ y}\) również jest wektorem \(\displaystyle{ 100}\)-elementowym składającym się z wartości obliczonych przez funkcję (w ujęciu zwykłym, nie matlaba), którą podałeś w inpucie. Matlab liczy to w taki sposób: bierze po kolei elementy z wektora \(\displaystyle{ x}\) (czyli taka pętla for) i podstawia pod \(\displaystyle{ x}\) w inpucie, który podasz daną wartość, np. dla wektora \(\displaystyle{ x=\left[ 1\mbox{ }2\mbox{ }3 \right]}\) wektor \(\displaystyle{ y}\) zostałby obliczony następująco:
y(1)=input('Podaj wielomian: ') gdzie \(\displaystyle{ x=1}\) y(2)=input('Podaj wielomian: ') gdzie \(\displaystyle{ x=2}\) y(3)=input('Podaj wielomian: ') gdzie \(\displaystyle{ x=3}\)
np. dla input=x.^2 mamy:
y(1)=1.^2=1.0
y(2)=2.^2=4.0
y(3)=3.^2=9.0
Czyli otrzymujesz wektor \(\displaystyle{ y}\) składający się z liczb (typ double): \(\displaystyle{ y=\left[ 1.0\mbox{ }4.0\mbox{ }9.0\right]}\) . Czyli \(\displaystyle{ y}\) jest traktowany przez matlaba jako wektor liczb, nie funkcja.
Może masz innego matlaba niż ja - mi tamten kod działa bezproblemowo - może podaj dokładną treść błędu?
GG niestety nie używam.
Co do pętli for - nie możesz zwiększyć indeksu, bo i tak to nic nie zmieni. Matlab przy każdym przebiegu pętli resetuje wartość \(\displaystyle{ i}\), tzn. przypisuje do tej zmiennej kolejną wartość z wektora \(\displaystyle{ \left[ 1\mbox{...}jakas_wartosc\right]}\), więc tutaj nie możesz tak zrobić. Powinien być inny sposób na to, co chcesz osiągnąć.