6 svar
52 visningar
Zachis är nöjd med hjälpen!
Zachis 49
Postad: 2 jan 2021

Simpsons regel för att uppskatta intergraler

 

function integral=simpson(f,a,b,N) 
%Där funktion är den funktionen som ska integreras, a och b är
%integrationsgränser och N är antalet integreringspunkter
h=(b-a)/N; %Intervalllängden beräknas
fa=exp(-a^2); %startvärde
fb=exp(-b^2);%stopvärde

ffU=0;
for i=2:2:N
    x=(a+(i-1)*h);
    fUdda=exp(-x^2);
    ffU=ffU+fUdda;
end
ffJ=0;
for i=3:2:N
    x=(a+(i-1)*h);
    fJamn=exp(-x^2);
    ffJ=ffJ+fJamn;
end
resultat=((h/3)*(fa+fb+4*ffU+2*ffJ));
disp(resultat)
end

Ska skriva en matlab kod där man använder simpsonsregel för att uppskatta en intergral. Jag får inga error meddelanden när jag kör koden men däremot är svaret helt fel. Någon som kan se vad jag gjort för fel? Har testat med bland annat

simpson(@sin,0,pi/2,211)

men då får jag bara svaret 0.862..osv. 

Det kanske är jag som tänker fel, men formeln för Simpsons verkar inte helt rätt? Det ska väl vara 

h6(f(a)+4f((a+b)/2)+f(b)\frac{h}{6}(f(a)+4f((a+b)/2)+f(b)

Det var dock länge sedan jag arbetade med simpsons, så det kan vara jag som är ute och cyklar. 😅

Zachis 49
Postad: 2 jan 2021

hm, funderar på att skrota min kaoskod. 

Jag testade att använda koden som är längst ner på wikipedia sidan  https://sv.wikipedia.org/wiki/Simpsons_regel och jag fick ett rimligt svar (0,99...) däremot frågar man wolframalpha så är svaret 0.000003 https://www.wolframalpha.com/input/?i=integral+of+sinx+from+0+to+pi%2F2++simpson+rule+3+interval 

Vad är egentligen rätt. Känns ju konstigt att enligt wikipedias matlab kod så är det >1 och wolframalpha säger att det är <1?

WolframAlpha säger att svaret är 1,00003? Så det låter ganska rimligt att Wikipedias metod skulle stämma? 🤔

Zachis 49
Postad: 2 jan 2021

ja, såklart 1.00003 (inte 0.00003, måste tryckt fel). Nja. Jag menade att 0.999... är betydligt rimligare än svaren jag fick med min kod, men sen när jag kolla in WolframAlpha så kändes det inte så rimligt längre :P

Zachis 49
Postad: 2 jan 2021

jag listade ut det. Anledningen varför inte wikipedia koden funkade var för att man måste skriva in ett jämt antal iterationer

Aha, såklart! Snyggt letat! :)

Svara Avbryt
Close