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

用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 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助