Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Matlab funkcija, potrebna pomoci

[es] :: Matematika :: Matlab funkcija, potrebna pomoci

[ Pregleda: 2366 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

igor0511
student

Član broj: 303454
Poruke: 5
*.dynamic.sbb.rs.



Profil

icon Matlab funkcija, potrebna pomoci25.05.2012. u 19:50 - pre 145 meseci
Naime, imam problem pošto imam seminarski rad iz Matlaba koji moram da uradim za nekoliko dana, a nažalost zaista ne znam kako pošto je jedino što je profesor bio voljan da podeli sa mnom je da treba 2min da se otkuca kod,pa vas molim ako neko moze da mi pomogne. Tema je numeričko diferenciranje.
Program bi kao ulaze trebao da ima 2 vekta, x i y,red do koga se računanaju razlike, tačka u kojoj se računa izvod i da li je potreban prvi izvod ili i prvi i drugi. Rečeno mi je da će mi ove formule biti potrebne.

yi=f(xi) xi+1-xi=h

f'(x) priblizno 1/h(deltay+(2q-1)/2 *delta na kvadrat y0+(3qˇ2-6q+2)/6 delta na 3 y0+(2q^3-9q^2+11q-3)/12 *delta na 4 y0+...)

f''(x) priblizno jednako 1/h^2(delta^2y0+(q-1)delta^3y0+(6q^2-18q+11)/12delta na 4 y0+...=

gde je q=(x-x0=/h

Molim vas ako se neko snalazi u matlabu da mi pomogne da napisem funckiju jer je zaista hitno.
Unapred hvala.
 
Odgovor na temu

Sonec

Član broj: 284879
Poruke: 892



+332 Profil

icon Re: Matlab funkcija, potrebna pomoci25.05.2012. u 20:23 - pre 145 meseci
Nije mi jasno, jer, kao prvo, sta predstavljaju tri tacke, ne mozes tako napisati u matlabu (nekom programu, svejedno). Ti kazes red, dobro, recimo da to predstavlja stepen polinoma (ako ja dobro razumem), ali, ja sam taj stepen mogao i da dobijem iz duzine samih vektora X i Y. Budi malo precizniji, il mi objasni malo bolje zadatak i moci cu da ti pomognem. Ovo je inace formula koja se dobija iz Njutnovog interpolacionog polinoma za interpolaciju unapred.

Leonardo da Vinči

Nema istine u onim naukama u kojima se matematika ne primenjuje.

Milorad Stevanović

Bog postoji zato sto je matematika neprotivurečna.
 
Odgovor na temu

igor0511
student

Član broj: 303454
Poruke: 5
*.dynamic.sbb.rs.



Profil

icon Re: Matlab funkcija, potrebna pomoci25.05.2012. u 20:50 - pre 145 meseci
@Sones hvala puno na odgovoru,ne znam koliko još mogu informacija da ti pružim o zadatku pošto je ovo jedno što sam do sad saznao. Asistent mi je ovako definisao zahteve zadatka "Od korisnika treba da trazite da unese vektore vrednosti x i y i do kog reda konacne razlike treba da se racunaju, kao i u kojoj tacki se trazi da se izracuna vrednost izvoda i da li se trazi samo prvi ili i prvi i drugi
izvod."
Sada sam malo tražio o računanju razlika polinoma i kao što si i rekao, mogu da se izračunaju iz vektora do kog reda trebaju tako da prepostavljam da može i bez toga da se uradi.
Našao sam jedan primer zadatka koji bi ovaj program trebao da rešava

Izračunati približno vrednosti naznaćenih izvoda funkcije y=f(x) zadate tablično

y 0,525 0,526 0,527 0,528
x 0,50121 0,50208 0,50294 0,50381 i izračunati f'(0,525)

Nadam se da ti je ovo pružilo dovoljno informacija da vidiš kako se ovo radi i hvala mnogo na pomoći!
 
Odgovor na temu

Sonec

Član broj: 284879
Poruke: 892



+332 Profil

icon Re: Matlab funkcija, potrebna pomoci25.05.2012. u 21:44 - pre 145 meseci
Dobro, aj da pokusam nesto (nisam testirao)

Code:
function [prvi drugi] = izvodi(X,Y,x)

n  = length(X);

% pravimo tablicu konacnih razlika

kRazlike = zeros (n-1,n);
for i = 1:n-1
    kRazlike (i,1) = Y (i+1)-Y (i);
end
for j = 2:n-1
    for i = 1:n-j
        kRazlike (i,j) = kRazlike (i+1,j-1) - kRazlike (i,j-1);
    end
end
%prikazujemo ih korisniku

disp (kRazlike);

% I NJUTNOV  INTERPOLACIONI POLINOM
% y = Y (1)+ q*kRazlike (1,1) + q*(q-1)*kRazlike (1,2)/2! + q*(q-1)*(q-2)*kRazlike (1,3)/3! + ...
%sta sad radim? napravicu polinom po q, i onda cu iskoristiti ugradjenu funkciju za diferenciranje polinoma

pol = [1 0] %ne znam koliko si upoznat sa ovakvim zapisom, ovo su koeficijenti polinoma, 
               %ovde je to polinom jedinicni q, da je pisalo [3 -2] bilo bi 3q-2
fakt = 1;
Njutn = [Y (1)];

for i = 1:n-1
    fakt = fakt*i;
    Njutn = [0 Njutn] + kRazlike (1,i)*q/fakt;
    pol = conv (pol, [1 -i]); %funckija conv za mnozenje polinoma
end

h = X (2)-X (1);
q = (x-X (1))/h;
vrPol = polyval (Njutn,q)    %funckija polyval racuna vrednost polinoma (prvi argument) u tacki (drugi argument),
                                    % dakle mi ovde u stvari racunamo f(x), jer q zavisi od x, mi mu prosledimo x,
                                    %  on izracuna q (mi smo napravili polinom po q) i onda on vrati vrednost f(x)

prviIzvod = (polyder (Njutn))/h;  %polyder vraca diferenciran polinom koji je zadatak kao argument, i delimo sa h,
                                            % recimo po formuli da je tako (al objasnjenje za to je
                                            %  u stvari to da je d(Njutn)/d(x) = d(Njutn)/d(q) * d(q)/d(x), a d(q)/d(x) = 1/h)
vrednostPrvogIzvoda = polyval (prviIzvod,q) %i evo, izracunao si vrednost prvog izvoda u tacki x  
                                            %(ovde nisam stavio ; da bi mi stampao prvi izvod u toj tacki)
prvi  = vrednostPrvogIzvoda; % ovo funkcija vraca

%drugi izvod? nikakav problem, samo iskoristis polinom za prvi izvod

drugiIzvod = (polyder(polyder (Njutn)))/(h*h); %ovo nisam siguran dal ce raditi (zbog dvostrukog poziva), 
                                             %mozes da izdvojis T = polyder(Njutn), pa da kazes polyder(T)...
vrednostDrugogIzvoda = polyval(drugiIzvod,q);
drugi = vrednostDrugogIzvoda;

% ako zelis da izracunas izvode i u cvornim tackama, onda mozes samo da  napravis novi fajl,
% i tamo se pozoves na ovu funkciju, pustis jednu for petlju i to je to


Problem koji se javlja ako se radi drugacije, jeste da od toga koliko je zavisi i to kakav ce nas polinom za f'(x) izgledati, jer se on i inace racuna peske, diferencira se clan po clan, ne postoji neka univerzalna formula za proizvoljno (tacnije, mozda i postoji, ali meni nije poznata (sve vreme govorim o interpolacionom polinomu sa konacnim razlikama)). Mozes da napravis interpolacioni polinom za neko konkretno , pozeljno malo, npr i onda se zadatak moze uraditi pesacki, samo prekucas gotove formule i to je to. Za neko malo vece se stvari dosta komplikuju.

Vrednost prvog (drugog, svejedno) izvoda moze se naci mnogo lakse ako se koristi aproksimacija koja se dobija iz Tejlorovog razvoja funkcije, naime, vazi (slicno za drugi izvod), i onda na osnovu cvorova i vrednosti prvih izvoda u cvorovima ti mozes da napravis neki interpolacioni polinom i lako da nadjes vrednost prvog izvoda u nekoj tacki (za koju ima smisla posmatrati, da ne trazis u nekoj mnogo dalekoj tacki, jer onda dolazi do ekstrapolacije).


[Ovu poruku je menjao Sonec dana 25.05.2012. u 23:15 GMT+1]
Leonardo da Vinči

Nema istine u onim naukama u kojima se matematika ne primenjuje.

Milorad Stevanović

Bog postoji zato sto je matematika neprotivurečna.
 
Odgovor na temu

igor0511
student

Član broj: 303454
Poruke: 5
*.dynamic.sbb.rs.



Profil

icon Re: Matlab funkcija, potrebna pomoci25.05.2012. u 23:13 - pre 145 meseci
Ovo je sjajno! Hvala puno :) Zaista si me spasao. Za objasnjenja nemam reci, posle prvog citanja koda sve mi je bilo jasno sta se desava i mislim da je to upravo ono kako bi trebalo da izgleda. Poslacu sada profesoru da vidim da li mu odgovara, ali mislim da nema razloga da ne prihvati jer ovo radi savresno. Jos jednom hvala mnogo!
 
Odgovor na temu

igor0511
student

Član broj: 303454
Poruke: 5
*.dynamic.sbb.rs.



Profil

icon Re: Matlab funkcija, potrebna pomoci28.05.2012. u 20:30 - pre 145 meseci
Evo da se još jednom zahvalim, kod je bio odličan i asistent je uneo samo male izmene, ovako sad izgleda

function [prvi drugi] = izvodi1(X,Y,x)

n = length(X);

% tablica konacnih razlika

kRazlike = zeros (n-1,n);
for i = 1:n-1
kRazlike (i,1) = Y (i+1)-Y (i);
end
for j = 2:n-1
for i = 1:n-j
kRazlike (i,j) = kRazlike (i+1,j-1) - kRazlike (i,j-1);
end
end
disp (kRazlike);

% I NJUTNOV INTERPOLACIONI POLINOM
% y = Y (1)+ q*kRazlike (1,1) + q*(q-1)*kRazlike (1,2)/2! + q*(q-1)*(q-2)*kRazlike (1,3)/3! + ...
pol = [1 0];
%fakt = 1;
%Njutn = [Y (1)];
h = X (2)-X (1);
q = (x-X (1))/h;
prviSum =0;
drugiSum=0;
for i = 1:n-1
faktor = polyder(pol);
faktor2= (polyder(faktor))/factorial(i);
faktor = faktor/factorial(i);
prviSum = prviSum + polyval(faktor,q) * kRazlike(1,i);
drugiSum= drugiSum+ polyval(faktor2,q) * kRazlike(1,i);
%fakt = fakt*i;
%Njutn = [0 Njutn] + kRazlike (1,i)*q/fakt
pol = conv (pol, [1 -i]); %funckija conv za mnozenje polinoma
end

prvi = prviSum/h;
drugi=drugiSum/(h^2);

%vrPol = polyval (Njutn,x) %funckija polyval racuna vrednost polinoma (prvi argument) u tacki (drugi argument),
% racunamo f(x), jer q zavisi od x, mi mu prosledimo x,
% on izracuna q i onda on vrati vrednost f(x)

%prviIzvod = (polyder (Njutn))/h; %polyder vraca diferenciran polinom koji je zadatak kao argument, i delimo sa h,

%vrednostPrvogIzvoda = polyval (prviIzvod,q) % vrednost prvog izvoda u tacki x i stampa ga

%prvi = vrednostPrvogIzvoda;

%drugi izvod se ispod racuna

%drugiIzvod = (polyder (prviIzvod))/h;
%vrednostDrugogIzvoda = polyval(drugiIzvod,q);
%drugi = vrednostDrugogIzvoda;



end






E sad imam par pitanja: Počeo sam da radim gui sada, kao ulaze imam vektore X i Y i tačku x u kojoj se računaju izvodi i to ću raditi preko edita i trebaće mi jedno dugme da se to pokrene,šta bi trebali da budu izlazi po ovom kodu,tj da li samo vrednost izvoda ili da se i postavljaju razlike i kako to da sredim? i kako bih trebao da pišem kod da bi mi string čitao kao matricu,tj da bih povezao varijablu x i neki edit box?
 
Odgovor na temu

igor0511
student

Član broj: 303454
Poruke: 5
*.dynamic.sbb.rs.



Profil

icon Re: Matlab funkcija, potrebna pomoci06.06.2012. u 20:21 - pre 145 meseci
Evo gui i rad su gotovi, ali imamo da dodamo još i grafike,tako da bi bilo lepo ako bi neko mogao da mi pomogne.
Kod je uglavnom isti kao gore, a trebalo bi još da program crta grafik tako što spaja tačke dobijene Lagranžovim polinomom i da drugačije boji tačke ili šta već,nisam baš najbolje ni shvatio...
uglavnom gui ovako izgleda,s tim što sve radi osim grafika koji sam tu stavio čisto orijentaciono
http://imageshack.us/photo/my-images/256/guivn.png/
Molim vas da mi neko pomogne oko sređivanja ovog grafika, unapred hvala!
 
Odgovor na temu

[es] :: Matematika :: Matlab funkcija, potrebna pomoci

[ Pregleda: 2366 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.