3 svar
107 visningar
Ciilon90 44
Postad: 15 apr 2023 09:03

Vandermondematris

Uppgiften lyder:

Gör en funktion, som tar en en kolonnvektor med interpolationsnoder och en kolonnvektor med motsvarande funktionsvärden, som interpolanten ska anta i noderna. Beräkna ett interpolationspolynom av grad 𝑛, där 𝑛+1 är antalet datapunkter. Din funktion ska alltså ta vektorerna [𝑥0𝑥1…𝑥𝑛]𝑇[ och [𝑓0𝑓1…𝑓𝑛]𝑇 som input, och den ska returnera koefficienterna [𝑐0𝑐1…𝑐𝑛]sådana att interpolanten𝑃𝑛(𝑥)=𝑐0+𝑐1𝑥+…+𝑐𝑛𝑥^n
uppfyller 𝑓(𝑥𝑘)=𝑓𝑘 för alla 𝑘=0,1,…,𝑛 Använd för enkelhets skull den naiva metoden. 

Din funktion ska förutom koefficientvektorn c också returnera det interpolerande polynomet som en anonym funktion.

 

Det här är programmeringskoden som jag hittills fyllt i:

clear variables

 
x=[-1 0 1]' % Sätt in dina egna noder och värden
f=[-9 -8 -15]'
naiv(x,f)

 
function [koefficienter,interpolant]=naiv(noder,varden)
n=length(x); % FYLL I
V=[]; % FYLL I
for k=0:n-1
V= % FYLL I
end
koefficienter=inv(V)*varden; % FYLL I
interpolant=@(x) polyval(flipud(koefficienter),x); % Bra som den är, rör ej
end

 

Vet inte vad jag ska sätta in mer för att få det att fungera??

R0BRT 70
Postad: 16 apr 2023 23:08

Såhär kan du skapa en Vandermonde-matris med hjälp av de noder du anger i vektor x:

n = length(x) - 1;
V = zeros(n+1, n+1);
for i = 1:n+1
    V(i, :) = x(i).^(0:n);
end

 

Sedan kan du lösa ekvationssystem för att få dina kofficienter c:

c = V \ f;
Ciilon90 44
Postad: 17 apr 2023 18:54
R0BRT skrev:

Såhär kan du skapa en Vandermonde-matris med hjälp av de noder du anger i vektor x:

n = length(x) - 1;
V = zeros(n+1, n+1);
for i = 1:n+1
    V(i, :) = x(i).^(0:n);
end

 

Sedan kan du lösa ekvationssystem för att få dina kofficienter c:

c = V \ f;

Okej, tack!

Är detta också en lösning? 

x=[-1 0 1]'   

f=[-9 -8 -15]'

naiv(x,f)

function [koefficienter,interpolant]=naiv(noder,varden)

  

    V= fliplr(vander(noder)); %VANDERMONDEMATRIS

    koefficienter= inv(V)*varden; 

    interpolant=@(x) polyval(flipud(koefficienter),x); 

end

R0BRT 70
Postad: 17 apr 2023 22:58

Det är riktigt att det går att använda 'vander'-funktionen för att skapa matrisen. Den genererar en matris där kolumnerna är i omvänd ordning jämfört med exemplet, därför kan du använda 'fliplr' för att vända kolumnerna.

Svara
Close