Kto zna sie na matlabie?

Musze liniowo interpolowac funkcje w celu optymalnego doboru wezlow interpolacji. Problem w tym, ze wezlow interpolacji ma byc mozliwie malo a blad interpolacji ma byc ustalony dla przedzialu funkcji. Tzn. jak moj wykladowca zechce aby blad w jakims przedziale byl np. 1% to matlab musi mu podac optymalne wezly. Takie mam zadanie. Funkcja ma byc z jedna zmienna. pozdrawiam, dArek

Reply to
dArek
Loading thread data ...

Uzytkownik "dArek" snipped-for-privacy@tenbit.pl napisal w wiadomosci news:d1ul5l$97$ snipped-for-privacy@korweta.task.gda.pl...

Pobaw sie funkcjami: polyfit - znajdowanie wspolczynnikow krzywej N stopnia polyval - oblicza wartosci Y majac X i wektor wpsolczynikow krzywej

dobierajac odowiednia ileosc punktow (x i y) do stopnia wielomianu (N) otrzymasz aproksymacje lub interpolacje (polyfit)

Reply to
grze

Rozwiazalem to na chlopski rozum. Tylko kto mi powie co jest nie tak. Chyba cos zle porownuje bo wyznacza za malo punktow interpolacji. Jakmu zadaje blad 0.01 to chyba nieco wiecej powinno byc rozwiazan.

%Wykres WC od V, gdzie V jest w okreslonym zakresie %Blad - zmienna, w ktorej podajemy wartosc oczekiwanego bledu interpolacji w pelnym zakresie funkcji ;) wezly=[1] T=5; Blad=10 V=1:0.1:100; WC=35.74+0.6215*T-35.75*V.^0.16+0.4275*T*V.^0.16; %V1=min; V2=max V1=1; V2=100; while V1<100 %obliczam wartosc WC dla V1 i V2 WC1=35.74+0.6215*T-35.75*V1.^0.16+0.4275*T*V1.^0.16; WC2=35.74+0.6215*T-35.75*V2.^0.16+0.4275*T*V2.^0.16; %obliczam uklad rownan %WC1=a*V1+b %WC2=a*v2+b a=(WC2-WC1)/(V2-V1); %b=WC2-((WC2-WC1)/(V2-V1))*V2; b=WC1-((WC2-WC1)/(V2-V1))*V1; %przeprowadzam prosta przez V1i V2 prosta=a*V+b; %dziele przedzial (V2-V1)/2 V3=(V2-V1)/2; %obliczam wartosc funkcji "prosta" w punkcie V3 prosta3=a*V3+b; %obliczam wartosc funkcji WC w punkcie V3 WC3=35.74+0.6215*T-35.75*V3.^0.16+0.4275*T*V3.^0.16; %obliczam blad dla WC3 i prosta3 Blad1=(abs((prosta3-WC3)/WC3))*100 %porownuje Blad1 z oczekiwanym bledem podanym w zmiennej Blad if Blad1<=9

V1=V2 wezly=[wezly V1] V2=100; end if Blad1>Blad if V2>=V1+0.02 V2=V2-0.01; else break end end end disp(wezly) wynik=35.74+0.6215*T-35.75*wezly.^0.16+0.4275*T*wezly.^0.16; plot(V, WC, 'b', wezly, wynik, 'ro') grid

Reply to
dArek

Tam gdzie jest "if Blad1<=9" powinno byc if "Blad1<=Blad". Pomozcie co jest nie tak?

Reply to
dArek

Moze i to co piszesz jest OK, ale mowie ci zainteresuj sie funkcjami polyfit i polyval. Do liczenia bledow masz funkcje "norm" jak nie wiesz jak to sie stosuje to propnuje "help _nazwa_funkcji_" Nie ma co wywazac otwrtych drzwi bo to wszystko jest zrobione i na pewno szybciej dziala!!

Reply to
grze

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.