Re: [問題] 曲面內外插如何用interp2 已回收

看板MATLAB作者 (eji)時間15年前 (2010/02/09 22:56), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
因為你原始的資料就比較少 理論上可以找到無窮多的曲面來通過你全部的資料點 可以使用自定的函數來進行插值 以下我使用radial basis function中的Multiquadric(MQ) 可以參考維基 http://en.wikipedia.org/wiki/Radial_basis_function 其中MQ可藉由形狀函數c的調整 來改變曲面的形狀 所以你可以調整c的值 來調整插值的結果 clear;clc;format long x=[8 10 3 5 8 4 6 1]; y=[1 1 2 2 3 4 4 6]; z=[0.99 0.62 0.98 0.88 0.98 0.64 0.73 0.76]; c=3; %形狀函數,可調整最後曲面的形狀 N=length(x); A=zeros(N,N); b=z'; for i=1:N for j=1:N r=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2); A(i,j)=sqrt(r^2+c^2); end end alpha=A\b; %計算係數 erc=norm(A*alpha-b) %驗證係數的誤差 [xx,yy]=meshgrid(1:10,1:10); [m,n]=size(xx); zz=zeros(m,n); for i=1:N r=sqrt((xx-x(i)).^2+(yy-y(i)).^2); zz=zz+alpha(i)*sqrt(r.^2+c^2); end %zz即為你要的數據 mesh(xx,yy,zz) for i=1:N ii=find(xx==x(i)&yy==y(i));z2(i)=zz(ii); end z2 erz=norm(z2-z)%驗證插值出來的數據與原數據的誤差 ※ 引述《patricia27》之銘言: : (俯看分布) : z 1 2 3 4 5 6 7 8 9 10 : ┼┬┬┬┬┬┬┬┬┬┬┬y : 1├ ‧(1,6) : 2├ 想內/外插補足xi=1:10 yi=1:10 間 z的數據 : 3├ ‧(3,2) : 4├ ‧(4,4) 試了很久的interp2, 總覺得它的x,y需要一定 : 5├ ‧(5,2) : 6├ ‧(6,4) 的分布均勻才能使用。 : 7├(8,1) : 8├‧ ‧(8,3) 請問我還有什麼方法可以試試 : 9├ : 10├‧(10,1)           或是 interp2哪裡使用錯誤了呢? ~"~ : ├ : x :      苦惱了很久始終不得其解, 先謝過解惑提點的好心版友了 <(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.146.175
文章代碼(AID): #1BSNUEMd (MATLAB)
文章代碼(AID): #1BSNUEMd (MATLAB)