首页 文章

使用不同的模型但相同的参数拟合不同的数据集

提问于
浏览
1

我正在寻找一种方法来适应两个不同的数据集与不同的拟合模型,但取决于Matlab中相同的参数 . 到目前为止我找到的所有解决方案要么不是用于matlab,要么不处理这个确切的问题 .

这是一个粗略的例子我的问题是什么:我已经获得了两个应采用这些形式的数据集:

数据集1: f(x) = a*exp(x)+b

数据集2: g(x) = atan(b*x/a)

真正的公式更复杂,但原则应该是相同的 .

当我尝试使用NonlinearLeastSquares独立地拟合它们时,matlab显然为两个不同数据集的变量 ab 提供了不同的值 . 我尝试将一种解决方案作为起点提供给另一种拟合程序但很少提高准确性 . 有没有办法告诉Matlab同时适合两个数据集,或者至少找到最适合bost模型的变量?

2 回答

  • 0

    通常,您可以使用fmincon来执行此操作 . 我们的想法是定义一个将f(x)和g(x)都考虑在内的函数 .

    让我们这样做 .

    function error2 = myFunction(betas,x)
    
    lambda=0.5;
    
    error2=0;
    
    a=betas(1,1);
    b=betas(2,1);
    
    x1=x(:,1); %Assuming that both datasets have the same size. If they are not you can adjust it
    y1=x(:,2);
    x2=x(:,3);
    y2=x(:,4);
    
    n=size(x,1); 
    
    for i=1:n
        f1=a*exp(x1(i,1))+b;
        f2=atan(b*x2(i,1)/a);
        error2=error2+lambda*(y1(i,1)-f1)^2 + (1-lambda)*(y2(i,1)-f2)^2;
    end
    

    请注意,在“beta”中我保留参数和“x”我保留数据 . 我不得不引入一个新变量“lambda”来加权函数f和g . 这很好,因为变化的lambda你能看到其中一个函数如何影响另一个函数的估计 . 实际上,您可以从lambda = 0开始,并对此例程运行多次,例如0.1,0.2,...,1 .

    现在你必须使用fmincon调用这个函数 .

    clear all
    close all
    
        % Here you have to create your data x: Remember the structure I used for x=[x1,y1,x2,y2]
    
       x1=
       y1=
       x2=
       y2=
    
       x=[x1,y1,x2,y2];
    
    
        % you need to initiate the values of your parameters beta
    
    a0=
    b0=
    
    beta0(1,1)=a0;
    beta0(2,1)=b0;
    
    beta = fmincon(@(beta)myFunction(beta,x), beta0);
    

    这必须奏效!

  • 2

    在墙上,但尝试拟合如何: f(x)+g(x) = a*exp(x)+b + atan(b*x/a)

    你怎么看?这完全是愚蠢的吗?

    我知道如果f(x)和g(x)的大小不匹配,它将不起作用(并且可能很少)因为那时两个不同部分的误差(你正在最小化)将是不相等的并且无论如何你最终会安装一个函数或另一个函数 .

相关问题