精华内容
下载资源
问答
  • PAGE / NUMPAGES 有一组关于MH的实验数据附件1.data已知其符合 分布请利用最小二乘法编写程序求三个参数abc的值要求利用MATLAB编程20分 解拟合两组数据MH已知 只需确定多项式系数abc根据最小二乘原则使 所求问题成为...
  • 3. 血液容积 v, t=0 注射剂量 d, 血药浓度立即为 d/v. 2. 药物排除速率与血药浓度成正比比例系数 k>0) 模型假设 1. 机体看作一个房室室内血药浓度均匀 一室模型 模型建立 ? d/ c(0) 3 ? 得 由假设 -kc dt dc 2 ?...
  • 最小二乘法拟合直线 程序 function linear_fit % 最小二乘法拟合直线 clear; clc; prompt={'Name of data file'}; title='Linear_fit; lineNo=2; def={'Linearfit.dat'}; outval=inputdlg(prompt,title,lineNo,def; ...
  • OpenCV 与 Matlab最小二乘法拟合直线数据不一致的问题 在使用最小二乘法拟合直线时,在 OpenCV 中拟合出的结果与 Matlab 中不一致。查阅资料后,发现 Matlab 中,使用最小二乘拟合时,使用的残差函数为y 的差值,...

    OpenCV 与 Matlab 中最小二乘法拟合直线数据不一致的问题

    在使用最小二乘法拟合直线时,在 OpenCV 中拟合出的结果与 Matlab 中不一致。查阅资料后,发现 Matlab 中,使用最小二乘拟合时,使用的残差函数为y 的差值,即拟合值与实际值之间的差值,并不符合要使用点到直接的距离误差最小的思想;OpenCV 中的残差计算,则是使用了点到直线的距离误差最小,但opencv 中,使用了 M 估计对各个点的权重进行调整,因此,在使用过程中,需要注意;
    以下为最小二乘法拟合直线的 Python 代码:

    import numpy as np
    import cv2 as cv
    from scipy.optimize import leastsq
    
    
    def func(p, x):
        k, b = p
        return k * x + b
    
    
    def error(p, x, y):
        return func(p, x) - y
    
    
    def dist_error(p, x, y):
        k, b = p
        dist = np.abs(k * x + b - y) / np.sqrt(k**2 + 1)
        return dist
    
    
    def main():
        pts = np.array([(1, 3), (2, 5), (3, 8)], dtype=np.float64)
        x = pts[:, 0]
        y = pts[:, 1]
        para = leastsq(error, [1, 0], args=(x, y))
        para1 = leastsq(dist_error, [1, 0], args=(x, y))
        vx, vy, x0, y0 = cv.fitLine(pts, cv.DIST_L2, 0, 0.01, 0.01)
        k = vy / vx
        b = y0 - k * x0
        print("y 绝对值最小:", para[0])
        print("距离最小:", para1[0])
        print("opencv 拟合结果:", k, b)
    
    
    if __name__ == '__main__':
        main()
    
    
    

    在这里插入图片描述
    通过以上结果,可以看出,OpenCV 中的直线拟合,使用的最小二乘法的残差是距离的最小值;
    注:由于 opencv 中使用了 M 估计进行了权重的调整,所以,如果只想用单纯的最小二乘法时,可根据需要自行编写算法。

    展开全文
  • 2、MATLAB基于最小二乘法原理的函数拟合 (1)常见的数据拟合直线拟合、多项式拟合、插值拟合等首先利用MATLAB中的函数来直观体验下一次拟合。 参考:http://www.qinms.com/work/nihe.html(拟合方法) h...

    1、前言:学习并记录的原因

    最小二乘法是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配。

    最小平方差法在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具——【From百度百科】。

    2、MATLAB基于最小二乘法原理的函数拟合

    (1)常见的数据拟合有直线拟合、多项式拟合、插值拟合等。首先利用MATLAB中的函数来直观体验下一次拟合。

    参考:http://www.qinms.com/work/nihe.html(拟合方法)

               https://zhuanlan.zhihu.com/p/99924603?utm_source=qq

    %拟合下面的数据
    clear
    clc
    x=[9,13,15,17,18.6,20,23,29,31.7,35];
    y=[-8,-6.45,-5.1,-4,-3,-1.95,-1.5,-0.4,0.2,-0.75];
    %% **********************************************************%%
    %{
    会用polyfit函数和polyval函数
    p=polyfit(x,y,n):最小二乘法计算拟合多项式系数。
    x,y为拟合数据向量,要求维度相同,n为拟合多项式次数。
    返回p向量保存多项式系数,由最高次向最低次排列。
    y=polyval(p,x):计算多项式的函数值。
    返回在x处多项式的值,p为多项式系数,元素按多项式降幂排序。
    %}
    %% 一次函数拟合
    coefficient1=polyfit(x,y,1);  %用一次函数拟合曲线
    y1=polyval(coefficient1,x);
    %% 三次多项式函数拟合
    coefficient2=polyfit(x,y,3);  %用三次函数拟合曲线
    y2=polyval(coefficient2,x);
    %% 三次多项式函数拟合
    coefficient3=polyfit(x,y,15);  %用15次函数拟合曲线
    y3=polyval(coefficient3,x);
    %% 结果显示
    figure('name','LSQ拟合','numbertitle','off')
    subplot(2,2,1)
    plot(x,y,'o')
    grid on
    title('原始离散数据')
    h=legend('data');      %线型标识名
    set(h,'Orientation','horizontal','Color', 'w','Box', 'on',...
        'Location','southeast','fontsize',10,'fontweight','n','fontname',...
        'times new romans','linewidth',0.5)
    
    subplot(2,2,2)
    plot(x,y,'o',x,y1,'-')
    grid on
    title('一次线性拟合')
    h1=legend('data','poly fit');      %线型标识名
    set(h1,'Orientation','vertical','Color', 'w','Box', 'on',...
        'Location','southeast','fontsize',10,'fontweight','n','fontname',...
        'times new romans','linewidth',0.5)
    
    subplot(2,2,3)
    plot(x,y,'o',x,y2,'-')
    grid on
    title('三次多项式拟合')
    h2=legend('data','poly fit'); 
    set(h2,'Orientation','vertical','Color', 'w','Box', 'on',...
        'Location','southeast','fontsize',10,'fontweight','n','fontname',...
        'times new romans','linewidth',0.5)
    
    subplot(2,2,4)
    plot(x,y,'o',x,y3,'-')
    grid on
    title('十五次多项式拟合')
    h3=legend('data','poly fit'); 
    set(h3,'Orientation','vertical','Color', 'w','Box', 'on',...
        'Location','southeast','fontsize',10,'fontweight','n','fontname',...
        'times new romans','linewidth',0.5)
    %% 插值拟合***************************************************************%%
    figure('name','插值拟合','numbertitle','off')
    x2 = 6:0.01:35;
    %{
        MATLAB中的插值函数为interp1,其调用格式为:  yi= interp1(x,y,xi,'method')           
        其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 
        'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 
        'nearest'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值;
        'pchip'立方插值.缺省时表示线性插值
        注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。
    %}
    subplot(2,2,1);
    plot(x,y,'ko');
    title('原始离散数据') 
    grid on
    
    y4 = interp1(x,y,x2,'spline');
    subplot(2,2,2);
    plot(x,y,'ko',x2,y4,'r')
    title('spline插值法拟合')  
    grid on
    
    y5 = interp1(x,y,x2,'linear');
    subplot(2,2,3);
    plot(x,y,'ko',x2,y5,'r')
    title('linear插值法拟合')  
    grid on
    
    y6 = interp1(x,y,x2,'pchip');
    subplot(2,2,4);
    plot(x,y,'ko',x2,y6,'r')
    title('pchip插值法拟合')  
    grid on

                           

    3、对非线性函数进行拟合(辨识参数?)

    参考:https://www.cnblogs.com/cv-pr/p/4741262.html

    假设我们大概知道某数学模型的函数为:y=a*log(x)+b;在大致模型参数进行数据采样【如代码中的假设使用的参数a和b分别为-1.5、-10】,如何确定较准确的参数a和b。

    %matlab的最小二乘拟合函数对非线性函数进行拟合
    % [q r] = lsqcurvefit(fun, q_0, xdata, ydata);
    % 输入参数:
    % fun:需要拟合的函数,假定有n个需要拟合的参数,那么 q = [q1,q2,...,qn]
    % q_0:表示用户给定的一个起始点
    % xdata:函数的自变量
    % ydata:函数的因变量
    % 输出参数:
    % q:表示求解得到的最优参数
    % r:表示最小二乘的目标函数值,即残差。
    x = 1:1:100;
    a = -1.5;
    b = -10;
    y = a*log(x)+b;
    yrand = y + 0.5*rand(1,size(y,2));% 在模拟模型参数的偏差下的采样数据
    plot(x,yrand,'ro');
    %% 最小二乘拟合
    xf=log(x);
    yf=yrand;
    f=inline('b(1)+b(2).*x','b','x');% 内联函数: f(b,x) = b(1)+b(2).*x
    [q,r]=lsqcurvefit(f,[1,0],xf,yf);%起点[1,0]拟合
    plot(x,yrand,'ro','LineWidth',1) %绘制采样点
    hold on;
    %% 绘制拟合曲线
    yn = q(1)+q(2)*log(x);
    hold on;
    grid on
    plot(x,y,'c','LineWidth',2);%原函数
    plot(x,yn,'b','LineWidth',2);%拟合线
    %% 设置Legend
    hleg = legend(['按原函数(y=' num2str(b,3) '+' num2str(a,3) 'ln(x)' ')采样数据'],...
                  ['原函数为(y=' num2str(b,3) '+' num2str(a,3) 'ln(x)' ')的曲线'],...
                  ['拟合结果:y=' num2str(q(1),3) '+' num2str(q(2),3) 'ln(x)'],...
                  'Location','NorthEast');%本身不能设置字体的大小,需要通过set进行设置
    set(hleg,'FontSize', 10, 'FontAngle','italic','FontWeight','bold',...
         'TextColor',[.6,.2,.1],'Color',[1,1,1]);%Color为设置坐标的背景颜色
     title('最小二乘拟合:y=a+b*ln(x)','Color','k','FontSize',12);
     xlabel('x','Color','k','FontSize',10);%横轴标题
     ylabel('y','Color','k','FontSize',10);%纵轴标题
     
    %% 保存图像
    set(1, 'InvertHardCopy', 'off');%设置的背景色有效,如果为on则图形不保存背景色,maltab 默认为 on
    filename = 'lnx';
    print(1, '-djpeg', filename);%其他格式 -djpeg,-dpng,-dbmp,-dtiff,-dgif
    

    4、尝试编写的直线拟合:

    https://zhidao.baidu.com/question/623179322094537004.html (很好的方便理解的一个回答,如下过程)

    %% 拟合的数据
    clear
    clc
    x=[9,13,15,17,18.6,20,23,29,31.7,35];
    y=[-8,-6.45,-5.1,-4,-3,-1.95,-1.5,-0.4,0.2,-0.75];
    %%  参考自编的一次直线拟合
    n=length(x);        % 变量个数
    x2=sum(x.^2);       % 求Σ(xi^2)
    x1=sum(x);          % 求Σ(xi)
    S_xy=sum(x.*y);     % 求Σ(xi*yi)
    y1=sum(y);          % 求Σ(yi)
    a=(n*S_xy-x1*y1)/(n*x2-x1*x1);      %解出直线斜率
    b=(y1-a*x1)/n;                      %解出直线截距b=(y1-a*x1)/n
    %作图
    % 先把原始数据点用蓝色十字描出来
    figure('name','直线拟合','numbertitle','off')
    % 用红色绘制拟合出的直线
    px=linspace(0 ,35,12);%0到35等线性间距的分为12份
    py=a*px+b;
    plot(x,y,'o',px,py,'r');
    grid on 
    h1=legend('data','poly fit');      %线型标识名
    set(h1,'Orientation','vertical','Color', 'w','Box', 'on',...
        'Location','southeast','fontsize',10,'fontweight','n','fontname',...
        'times new romans','linewidth',0.5)
    a,b
    %% 对比polyfit函数的直线拟合参数
    coefficient1=polyfit(x,y,1)

    一次直线拟合和polyfit的一次直线拟合得到的参数是相同的。 

       

    5、MATLAB工具箱cftool

    参考:https://blog.csdn.net/qq_36607894/article/details/99996277(有些拟合结果评价的内容)

    %% 工具箱在命令行直接运行
    sftool%老版本
    cftool

     后记:先记录到这里,后面有的再更。

    其他参考:(1)Python版本:https://www.jianshu.com/p/af0a4f71c05a

                                                     https://zhuanlan.zhihu.com/p/72241280

                     (2)最小二乘法的本质知乎回答:https://www.zhihu.com/question/37031188

                     (3)最小二乘法的曲线拟合方法在MATLAB中的实现:https://blog.csdn.net/m0_37395228/article/details/80875529?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-3.control&dist_request_id=1328767.44919.16175350586159931&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-3.control

                     (4)matlab 最小二乘拟合平面的方法:https://blog.csdn.net/qq_36686437/article/details/109552543

     

     

    展开全文
  • NET与Matlab结合 —— 最小二乘法直线拟合(C#)首先是一个.m文件drawgraph.m,确保它能够在Matlab里运行。 我这里是最小二乘法直线拟合程序。 %最小二乘法直线拟合%Created by Safirst C. Ke 2007.8.29 Wed 14:51...
     

    NET与Matlab结合 —— 最小二乘法直线拟合(C#)  首先是一个.m文件drawgraph.m,确保它能够在Matlab里运行。

    我这里是最小二乘法直线拟合程序。

    %最小二乘法直线拟合
    %Created by Safirst C. Ke 2007.8.29 Wed 14:51

    function drawgraph(coords)
    %传入的参数为两行向量,第一行为x坐标,第二行为坐标。

    %axis ([0 100 0 100]);
    grid on;
    hold on;

    %显示欲拟合的点的位置
    plot(coords(1,:), coords(2,:), '*');

    %分解x,y坐标
    x = coords(1,:)
    y = coords(2,:)'

    b = size(coords);
    c = ones(1, b(2));
     
     MT = [c; x];
     M = MT';
     
     %f为直线函数,f = mx + b;
     f = inv(MT * M) * MT * y
     ['y = ', num2str(f(2)), 'x + ', num2str(f(1))]


     %显示最终拟合的直线
     x = -max(x):max(x);
     y =  f(1) + f(2) * x;
     
     
     plot(x, y);
     xlabel('X轴');
     ylabel('Y轴');
     title('最小二乘法直线拟合 by Safirst C. Ke');
     
     legend(['y = ', num2str(f(2)), 'x + ', num2str(f(1))]);

    然后将这个文件包含在.NET的类库工程中,并进行编译。

    这里需要理解它的过程,毕竟.NET不能编译.m文件。怎么做到的呢?

    通过设置这个工程的生成事件属性,添加为

    call PlotDemoBuild.bat

    然后在PlotDemoBuild.bat这个文件里面写好用Matlab编译器mcc编译的命令行,最重要的部分就是

    mcc -M -silentsetup -vg -B "dotnet:PlotDemoComp,Plotter,2.0,private" -d ../../src ../../drawgraph.m

    这样的话,点击生成,就会通过mcc产生dll,即我们需要的类库。

    然后建立我们真正的C#工程,添加引用为刚才的类库,并开始写程序program.cs

    using System;
    using System.Collections.Generic;
    using System.Text;

    using MathWorks.MATLAB.NET.Utility;    

    using MathWorks.MATLAB.NET.Arrays;  

    //这两个引用显然要添加,不过好在这两个命名空间属于一个库MWArray.dll

    //C:/Program Files/MATLAB/R2007a/toolbox/dotnetbuilder/bin/win32/v2.0/MWArray.dll

    using PlotDemoComp;

    namespace ConsoleApplication2
    {
        class Program
        {
            //[STAThread]
            static void Main(string[] args)
            {
                try
                {
                    Console.WriteLine("Please Input the points you want to fit:");

                    string[] y = Console.ReadLine().Trim().Split();

                    int size = y.Length;
                    double[] x = new double[size];
                    for(int i = 0; i < size; i++)
                    {
                        x[i] = Convert.ToDouble(y[i]);
                    }

                    double[,] pointValues = new double[2, size / 2];

                   //从开头算起,相邻的两个数为一个点,所以x和y都是间隔一个的。如1,2,3,4代表两点(1,2),(3,4)

                    for(int i = 0; i < size; i += 2)   

                    {
                        int index = i / 2;
                        pointValues[0, index] = x[i];
                    }
                    for(int i = 1; i < size; i += 2)
                    {
                        int index = (i - 1) / 2;
                        pointValues[1, index] = x[i];
                    }
                    Plotter plotter = new Plotter();
                    plotter.drawgraph((MWNumericArray)pointValues);
                    Console.ReadLine();
                }
                catch(Exception exception)
                {
                    Console.WriteLine("Error: {0}", exception);
                }
            }
        }
    }

    运行结果如下:

    Please Input the points you want to fit:
    1 2 3 4 5 6 -1 -2 -3 -4 -5 -6

    *号标记欲拟合的点,直线为拟合直线!

    就写这么多,以后再加入一个曲线拟合的程序。

    特别声明:在下学习.NET C#和Matlab的时间均不超过1个月,

    望高手不要批评指责,照顾一下新手学习钻研的积极性! 

     

     

     

    假如给定的实验数据点为(Xi,Yi),其中i=0,1,...n,那么 直线与数据点的偏差平方和为

                                              


     

    要使得

    取到极小值,则要求:


     

    ,    

    这两个式子是取得极小值的必要条件,具体运算的过程如下:


     

    对该式求解得到:


    <!--[if !vml]--><!--[endif]-->

    以下就是我用C#做的源代码:

    public class LeastSquare
        {
            
    /// <summary>
            
    /// To Draw Linear Least Square Fitting Curve 
            
    /// </summary>
            
    /// <param name="g">The device on which to draw the curve</param>
            
    /// <param name="lp">A list of point used to do the approximation</param>
            public static void LeastSquare2(Graphics g, List<PointF> lp)
            {
                
    // Clear the client window with the white color
                g.Clear(Color.White);

                
    // Move the drawing origin to the point(200,200)
                g.TranslateTransform(200200);

                
    // Use FillEllipse method to draw each point as an ellipse
                foreach (PointF p in lp)
                {
                    g.FillEllipse(Brushes.Red, 
    new RectangleF(p.X - 5.0f, p.Y - 5.0f10.0f10.0f));
                }


                
    int i;
                
    float a, b, sumX, sumY2, sumY, sumXY;
                sumX 
    = 0.0f;
                sumY2 
    = 0.0f;
                sumY 
    = 0.0f;
                sumXY 
    = 0.0f;

                
    // To calculate as per the description of the Mathematical Formular
                for (i = 0; i < lp.Count; i++)
                {
                    sumY 
    += lp[i].Y;
                    sumY2 
    += lp[i].Y * lp[i].Y;
                    sumX 
    += lp[i].X;
                    sumXY 
    += lp[i].X * lp[i].Y;
                }

                
    // Deduct the coefficients required to do the approximation using the mathematical formular
                a = (lp.Count * sumXY - sumX * sumY) / (lp.Count * sumY2 - sumY * sumY);
                b 
    = (sumY2 * sumX - sumY * sumXY) / (lp.Count * sumY2 - sumY * sumY);

                Pen newPen 
    = new Pen(Color.Blue, 3.0f);
                g.DrawLine(newPen, 
    new PointF(0-/ a), new PointF(360, (360 - b) / a));
            }
        }


    下面则是调用上述代码的程序:

    private void linearToolStripMenuItem_Click(object sender, EventArgs e)
            {
                
    // Declare a list of points
                List<PointF> lp = new List<PointF>();

                
    // PointF array
                PointF[] pf = new PointF[]{
                    
    new PointF(0.0f,68.0f),
                    
    new PointF(10.0f,73.1f),new PointF(20.0f,66.4f),
                    
    new PointF(30.0f,70.6f),new PointF(40.0f,64.6f),
                    
    new PointF(50.0f,68.8f),new PointF(60.0f,61.0f),
                    
    new PointF(70.0f,65.8f),new PointF(80.0f,60.4f),
                    
    new PointF(90.0f,61.0f)
                };

                
    // Using AddRange method of the list to add the pointf array to the end of the list
                lp.AddRange(pf);

                
    // Call the static metod LeastSquare2 of LeastSquare Class to proceed
                LeastSquare.LeastSquare2(this.CreateGraphics(), lp);
            }

    下面是本程序运行结果的屏幕截图(Screen Shot):

    转载于:https://www.cnblogs.com/wenrenhua08/archive/2008/09/10/3993650.html

    展开全文
  • NET与Matlab结合 —— 最小二乘法直线拟合(C#) 首先是一个.m文件drawgraph.m,确保它能够在Matlab里运行。我这里是最小二乘法直线拟合程序。%最小二乘法直线拟合%Created by Safirst C. Ke 2007.8.29 Wed 14:51...

    NET与Matlab结合 —— 最小二乘法直线拟合(C#)  首先是一个.m文件drawgraph.m,确保它能够在Matlab里运行。

    我这里是最小二乘法直线拟合程序。

    %最小二乘法直线拟合
    %Created by Safirst C. Ke 2007.8.29 Wed 14:51

    function drawgraph(coords)
    %传入的参数为两行向量,第一行为x坐标,第二行为坐标。

    %axis ([0 100 0 100]);
    grid on;
    hold on;

    %显示欲拟合的点的位置
    plot(coords(1,:), coords(2,:), '*');

    %分解x,y坐标
    x = coords(1,:)
    y = coords(2,:)'

    b = size(coords);
    c = ones(1, b(2));
     
     MT = [c; x];
     M = MT';
     
     %f为直线函数,f = mx + b;
     f = inv(MT * M) * MT * y
     ['y = ', num2str(f(2)), 'x + ', num2str(f(1))]

     
     %显示最终拟合的直线
     x = -max(x):max(x);
     y =  f(1) + f(2) * x;
     
     
     plot(x, y);
     xlabel('X轴');
     ylabel('Y轴');
     title('最小二乘法直线拟合 by Safirst C. Ke');
     
     legend(['y = ', num2str(f(2)), 'x + ', num2str(f(1))]);

    然后将这个文件包含在.NET的类库工程中,并进行编译。

    这里需要理解它的过程,毕竟.NET不能编译.m文件。怎么做到的呢?

    通过设置这个工程的生成事件属性,添加为

    call PlotDemoBuild.bat

    然后在PlotDemoBuild.bat这个文件里面写好用Matlab编译器mcc编译的命令行,最重要的部分就是

    mcc -M -silentsetup -vg -B "dotnet:PlotDemoComp,Plotter,2.0,private" -d ../../src ../../drawgraph.m

    这样的话,点击生成,就会通过mcc产生dll,即我们需要的类库。

    然后建立我们真正的C#工程,添加引用为刚才的类库,并开始写程序program.cs

    using System;
    using System.Collections.Generic;
    using System.Text;

    using MathWorks.MATLAB.NET.Utility;    

    using MathWorks.MATLAB.NET.Arrays;  

    //这两个引用显然要添加,不过好在这两个命名空间属于一个库MWArray.dll

    //C:/Program Files/MATLAB/R2007a/toolbox/dotnetbuilder/bin/win32/v2.0/MWArray.dll

    using PlotDemoComp;

    namespace ConsoleApplication2
    {
        class Program
        {
            //[STAThread]
            static void Main(string[] args)
            {
                try
                {
                    Console.WriteLine("Please Input the points you want to fit:");

                    string[] y = Console.ReadLine().Trim().Split();

                    int size = y.Length;
                    double[] x = new double[size];
                    for(int i = 0; i < size; i++)
                    {
                        x[i] = Convert.ToDouble(y[i]);
                    }

                    double[,] pointValues = new double[2, size / 2];

                   //从开头算起,相邻的两个数为一个点,所以x和y都是间隔一个的。如1,2,3,4代表两点(1,2),(3,4)

                    for(int i = 0; i < size; i += 2)   

                    {
                        int index = i / 2;
                        pointValues[0, index] = x[i];
                    }
                    for(int i = 1; i < size; i += 2)
                    {
                        int index = (i - 1) / 2;
                        pointValues[1, index] = x[i];
                    }
                    Plotter plotter = new Plotter();
                    plotter.drawgraph((MWNumericArray)pointValues);
                    Console.ReadLine();
                }
                catch(Exception exception)
                {
                    Console.WriteLine("Error: {0}", exception);
                }
            }
        }
    }

    运行结果如下:

    Please Input the points you want to fit:
    1 2 3 4 5 6 -1 -2 -3 -4 -5 -6

    *号标记欲拟合的点,直线为拟合直线!

    就写这么多,以后再加入一个曲线拟合的程序。

    特别声明:在下学习.NET C#和Matlab的时间均不超过1个月,

    望高手不要批评指责,照顾一下新手学习钻研的积极性! 

    展开全文
  • 最小二乘法直线拟合

    2013-01-14 10:36:14
    运用最小二乘法拟合直线,所用软件matlab
  • 最小二乘法曲线拟合以及Matlab实现

    万次阅读 多人点赞 2017-12-28 17:31:23
    最小二乘法曲线拟合以及Matlab实现 在实际工程中,我们常会遇到这种问题:...最小二乘法直线拟合原理 曲线拟合 Matlab实现代码 最小二乘法直线线拟合原理 首先,我们从曲线拟合的最简单情况——直线拟合来引
  • 最小二乘法的简单C语言实现 这里直接上代码,理论...//最小二乘法求散点拟合函数y=a+bx的参数a和b void LFM(double x[],double y[],int n) { int i; double a=0,b=0; double sum1=0,sum2=0; double mean_x=0,me...
  • %得到子块里白色像素点拟合得到的直线的斜率k和截距b(调用zikuai函数) X{count}=x; %保存子块里所有白色像素的x坐标 Y{count}=y; %保存子块里所有白色像素的y坐标 K(count)=k; %保存子块里拟合得到的直线的斜率k ...
  • 最小二乘法直线拟合及其Matlab实现

    万次阅读 多人点赞 2014-12-10 16:47:57
    最小二乘法,通常用在我们已知数学模型,但是不知道模型参数的情况下,通过实测数据,计算数学模型,例如,在题目中,数学模型就是直线方程y=ax+b,但是不知道直线方程的a和b。   本来呢,我们只需要两组(xi,yi)...
  • 写在前面的:还以为这辈子都没有机会把Matlab与自己的程序结合起来,因为一直都没有时间去学习Matlab与C语言混合编程,而且也觉得那玩意儿有点难,需要很多时间;还以为这辈子都没有可能自己写一个图形拟合程序,...
  • MATLAB实现最小二乘法一元线性拟合,并求出预测直线的斜率与截距。
  • % 用最小二乘法进行直线拟合 plot(X, Y, 'o') xlabel('x') ylabel('y') hold on % a = (X.' * X).^(-1) * (X.') * Y x = mean(X); % X的均值 y = mean(Y); % Y的均值 b_0 = (X-x) * ((Y-y).') / ((X-x) * ((X-x).'))...
  • 最小二乘法 拟合平面直线

    万次阅读 2017-01-03 19:15:32
    在网上找了许多资料,用数学公式解释原理以及用matlab实现的居多,本文章主要解释用最小二乘法的进行点拟合成线,matlab 和 c++两个版本的代码实现。 使用矩阵实现: 根据公式A = (X'*X)-1*X'*Y(这个公式可以拟合...
  • 本节Jungle用C++实现最小二乘法拟合平面直线。 1.理论知识 平面直线的通用方程可以表示为 其中,A是直线的截距,B是直线的斜率。对于测量的二维坐标(x,y),x是精确分布的,而y是观测值。基于最小二乘的理论,...
  • 【图像融合】Frequency Partition之图像融合【Matlab 103期】 【图像评价】SVM之图像无参考质量评价【Matlab 104期】 【图像边缘检测】最小二乘法用于椭圆边缘检测【Matlab 105期】 【图像加密】基于GUI界面之混沌...
  • 目录追击走私船题目代码及其详解实现效果最小二乘法直线拟合题目代码及其详解实现效果 追击走私船题目 代码及其详解 %Ships pursuit clc clear x0=zeros(1,1);y0=zeros(1,1); %违法船只初始位置 x1=zeros(1,1);y1=...
  • 最小二乘法曲线拟合以及matlab实现

    千次阅读 2019-09-26 20:26:54
    原文地址:最小二乘法曲线拟合以及matlab实现 在实际工程中,我们常会遇到这种问题:已知一组点的横纵坐标,需要绘制出一条尽可能逼近这些点的曲线(或直线),以进行进一步进行加工或者分析...最小二乘法直线线拟合...

空空如也

空空如也

1 2 3 4
收藏数 68
精华内容 27
关键字:

matlab拟合最小二乘法直线

matlab 订阅