yynyjc 2021-11-16 16:55 采纳率: 100%
浏览 129
已结题

用MATLAB对一组磁滞曲线数据进行拟合

这个是实验册上面的实验数据

img

下面第一段是我的拉格朗日函数m文件

function y=lagrange(x0,y0,x)
n=length(x0);m=length(x);
for i=1:m
    z=x(i);
    s=0.0;
    for k=1:n
        p=1.0;
        for j=1:n
            if j~=k
                p = p*(z-x0(j))/(x0(k)-x0(j));
            end
        end
        s=p*y0(k)+s;
    end
    y(i)=s;
end

**接下来是命令行,对这些实验数据进行拟合,但是发现得到的曲线不对,不知道错在哪里了

x0 = [0.2,0.3,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.05,1.1,1.15,1.2,1.25,1.3,1.35,1.4,1.45];
y0 = [38,58,65,74,85,92,98,108,116,125,135,145,156,168,185,208,244,292,355,405,620,850,1200,1620];
x = linspace(0.2,1.45,24);

y1 = lagrange(x0,y0,x);
plot(x,y1,'g')
hold on 
plot(x0,y0,'*')

img

不知道是什么问题,更接触这个软件,还望各位朋友帮忙看看更正一下,谢谢!!

  • 写回答

1条回答 默认 最新

  • 技术专家团-Joel 2021-11-16 17:05
    关注

    你好,你给出的代码是拉格朗日(Lagrange)插值的代码,不是拟合的代码,拟合建议用polyfit函数,因为你如果用拉格朗日多项式插值的话,虽然可以保证多项式经过每一个点,但是当插值点个数过多的话,会出现龙格现象,即在插值点外的点的数值结果发生振荡,也即你所给的图像显示的曲线。
    现为你更正如下(弃用lagrange函数)

    x0 = [0.2,0.3,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.05,1.1,1.15,1.2,1.25,1.3,1.35,1.4,1.45];
    y0 = [38,58,65,74,85,92,98,108,116,125,135,145,156,168,185,208,244,292,355,405,620,850,1200,1620];
    x = linspace(0.2,1.45,24);
    p = polyfit(x0,y0,5); %5次多项式插值得到多项式系数 (经过检查5次效果比较好)
    y1 = polyval(p,x);%根据多项式系数得到插值的值y1
    plot(x,y1,'g')
    hold on 
    plot(x0,y0,'*')
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 已采纳回答 11月17日
  • 创建了问题 11月16日

悬赏问题

  • ¥15 升腾威讯云桌面V2.0.0摄像头问题
  • ¥15 关于Python的会计设计
  • ¥15 聚类分析 设计k-均值算法分类器,对一组二维模式向量进行分类。
  • ¥15 stm32c8t6工程,使用hal库
  • ¥100 有偿求易语言word文档取doc和docx页数方法或模块
  • ¥15 找能接spark如图片的,可议价
  • ¥15 关于#单片机#的问题,请各位专家解答!
  • ¥15 博通raid 的写入速度很高也很低
  • ¥15 目标计数模型训练过程中的问题
  • ¥100 Acess连接SQL 数据库后 不能用中文筛选