Vinnaren i pepparkakshustävlingen!
2012-09-12, 11:26
  #1
Medlem
snorbasses avatar
Vi har några inlämningsuppgifter i Matlab att göra. Personligen tycker jag dom är för svåra sett till hur mycket (lite) vi jobbat i programmet. (typ 2 veckor)

Detta är den sista uppgiften jag fastnat på:

Konstruera en funktion som bestämmer ett närmevärde till lösningen av ekvationen x=cos(x). Funktionen ska ha ett startvärde x0 och ett positivt (lämpligtvis litet) tal t som indata. Funktionen ska räkna ut en sekvens av reella tal x1=cos(x0), x2=cos(x1), och så vidare ända tills |Xj - X(j-1)|< t för något j. När detta sker ska funktionen ge Xj och j som utdata.

Jag tänker att jag ska göra en while loop men sen är det stopp.. Jag är helt rudis på detta
__________________
Senast redigerad av snorbasse 2012-09-12 kl. 11:39. Anledning: Glömde ett X
Citera
2012-09-12, 11:35
  #2
Medlem
Grogganns avatar
Låter väldigt mycket som Newton-Rhapsons metod? |Xj-X(j-1)| är toleransen isf.

Känns som att du kan använda dig av x=cos(x) --> cos(x)-x=0 vilket kanske är lättare att använda som funktion.
Citera
2012-09-12, 11:46
  #3
Medlem
snorbasses avatar
Citat:
Ursprungligen postat av Groggann
Låter väldigt mycket som Newton-Rhapsons metod? |Xj-X(j-1)| är toleransen isf.

Känns som att du kan använda dig av x=cos(x) --> cos(x)-x=0 vilket kanske är lättare att använda som funktion.

Ja det är det säkert, han har nämnt Newton-Rhapson på en föreläsning vill jag minnas. Har du något förslag på hur man skall lägga upp sitt script? Jag är inte ute efter att kopiera något rakt av, vill bara ha en spark i rätt riktning...
Citera
2012-09-12, 13:22
  #4
Medlem
Grogganns avatar
Citat:
Ursprungligen postat av snorbasse
Ja det är det säkert, han har nämnt Newton-Rhapson på en föreläsning vill jag minnas. Har du något förslag på hur man skall lägga upp sitt script? Jag är inte ute efter att kopiera något rakt av, vill bara ha en spark i rätt riktning...

Det går inte att skriva Newton-Rhapson på så många olika sätt, så kolla i boken på exempel, och försök sedan översätta till ditt fall. Är inget fel med att skriva av, så länge du förstår någorlunda hur funktionen fungerar!
Citera
2012-09-12, 21:02
  #5
Medlem
snorbasses avatar
Nu har jag efter lite hjälp från olika håll fått till något som fungerar. Det levererar svar på frågeställningen i alla fall... Slänger upp det eftersom jag alltid stör mig på trådar på nätet som ställer frågan man letar efter men är tom på svar.

Om någon ser något dumt säg gärna till!

% räkna ut närmevärde till x = cos(x)
% x1 = cos(x0), x2 = cos(x1) osv
% i princip cos(cos(cos(cos(x)))
% när Xj - X(j-1) < tol, skriv ut x och j (antal utförda operationer)
% för att komma till x ~ cos(x)

% definiera x0 och tol i kommandofönstret

a = [x0, cos(x0)]; % startvektor, värde definieras av x0
while abs(a(end)-a(end-1))>=tol % loop som fortsätter sålänge
% abs(sista talet i vektorn - näst sista)
% är större eller lika med "tol"
a = [a, cos(a(end))]; % varje nytt tal i vektorn = cos(näst sista)
end
disp('x=cos(x) är: ~ ')
xj = a(end) % sista talet i vektorn = närmevärdet
disp('antal beräkningar blev: ')
j = length(a) % antal tal i vektorn
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback