查看: 93|回复: 2|关注: 0

[未答复] 曲线拟合查表出现复数结果

[复制链接]

新手

10 麦片

财富积分


050


2

主题

9

帖子

0

最佳答案
发表于 6 天前 | 显示全部楼层 |阅读模式

1. 请教问题:
请教各位前辈,我想通过拟合函数的方法在W45D5_Br_SinglePM.mat查表得到angle_V_Axel{i,j}所对应的函数值;
采用了插值、也直接使用了Curve Fitting Tool生成的9阶多项式函数来计算,以及本代码中的polyfit/polyval函数来计算,均出现了复数值导致程序无法执行下去,初学使用不知如何处理。。。。
k=6;
p=polyfit(A(:,1),A(:,2),k);
MD_polyfit=polyval(p,angle_V_Axel{i,j});


Curve Fitting tool生成的函数:
Function_Polynomial_Fitting=19.3*X^9-150.2*X^8+496.2*X^7-904.8*X^6+988.6*X^5-655.4*X^4+251.8*X^3-48.18*X^2+2.433*X+0.1996;


2. 错误信息:
错误使用 mesh (line 71)
X、Y、Z 和 C 不能是复数。

出错 qingjiao (line 51)
mesh(RMD_Va_sum);


3. 源代码:
load('W45D5_Br_SinglePM.mat');

A=W45D5_Br_SinglePM;
R=68;
A(:,1)=A(:,1)/R;   
V_AXEL=cell(4*10);   

for i=1:4
    for j=1:10
        AXi_j=[R*sin(36*i/360*(2*pi))*cos(36*j/360*(2*pi)),R*sin(36*i/360*(2*pi))*sin(36*j/360*(2*pi)),R*cos(36*i/360*(2*pi))];
        V_Axel{i,j}=AXi_j;     
    end
end


RMD_Va_sum=zeros(180,360);

RMD_Va=zeros(4,10);
MD_polyfit=0;

for m=1:180
    for n=1:360
        angle_Long=1:1:180;  
        angle_Lant=1:1:360;   
        X=R*sin(angle_Long(m)/360*2*pi)*sin(angle_Lant(n)/360*2*pi);
        Y=R*sin(angle_Long(m)/360*2*pi)*cos(angle_Lant(n)/360*2*pi);
        Z=R*cos(angle_Long(m)/360*2*pi);
        Vamn=[X,Y,Z];            

              for i=1:4
                    for j=1:10      
                        angle_V_Axel{i,j}=acos((dot(Vamn,V_Axel{i,j}))/(norm(Vamn)*norm(V_Axel{i,j})));
                            if angle_V_Axel{i,j}<=15*pi/180
                               k=6;
                               p=polyfit(A(:,1),A(:,2),k);
                               MD_polyfit=polyval(p,angle_V_Axel{i,j});
                                    RMDmnij=MD_polyfit;      

                            RMD_Va(i,j)=RMDmnij;
                        else
                            RMD_Va(i,j)=0;
                            end
                    end
              end
              RMD_Va_sum(m,n)=sum(sum(RMD_Va));   
    end
end
mesh(RMD_Va_sum);


W45D5_Br_SinglePM.mat

13.33 KB, 下载次数: 1

待拟合处理查表数据

新手

10 麦片

财富积分


050


2

主题

9

帖子

0

最佳答案
 楼主| 发表于 6 天前 | 显示全部楼层
MD_Interp1=interp1(A(:,1),A(:,2),angle_V_Axel{i,j});
也是报一样的错误。

新手

10 麦片

财富积分


050


2

主题

9

帖子

0

最佳答案
 楼主| 发表于 前天 19:17 | 显示全部楼层
哪位前辈能帮忙看下可能问题出在哪一步了?尝试了很多方法,也把所有的数据改成了double型,依然是从:
m=65和n=65开始出现复数结果。。。
单独选择m和n等于大于65的某一个值计算结果却是合理的。。。。

第一次matlab程序,出师不利呀。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表