[已解决] 在双对数坐标系下有些无法拟合成直线,但如果是画在正常坐标系下就可以,大神们帮解答下啊,谢谢!

[复制链接]
www520xss 发表于 2021-9-23 23:44:16
代码:
A=xlsread('vhpga.xls',1);
y1 = A( ~isnan( A( :, 1 ) ), 1 );
x1 = A( ~isnan( A( :, 2 ) ), 2 );
y2 = A( ~isnan( A( :, 3 ) ), 3 );
x2 = A( ~isnan( A( :, 4 ) ), 4 );
y3 = A( ~isnan( A( :, 5 ) ), 5 );
x3 = A( ~isnan( A( :, 6 ) ), 6 );
%x1=A(:,1);
%y1=A(:,2);
%x2=A(:,3);
%y2=A(:,4);
%x3=A(:,5);
%y3=A(:,6);
p1=polyfit(x1,y1,1);
%p2=polyfit(log(x2),log(y2),1);
p2=polyfit(x2,y2,1);
p3=polyfit(x3,y3,1);
%p3=polyfit(log(x3),log(y3),1);
y11=polyval(p1,x1);
y21=polyval(p2,x2);
y31=polyval(p3,x3);
loglog(x1,y1,'bo');
hold on;
loglog(x2,y2,'g*');
hold on;
loglog(x3,y3,'r+');
hold on;
loglog(x1,y11,'-b','linewidth',2);
hold on;
loglog(x2,y21,':g','linewidth',2);
hold on;
loglog(x3,y31,'--r','linewidth',2);
legend('Thrust Fault','Normal Fault','Strike-Slip Fault','Fitted Line of Thrust Fault','Fitted Line of Normal Fault','Fitted Line of Strike-Slip Fault','FontName','Times New Roman','FontSize',12)
xlabel('E-W Horizontal PGA(Gal)','FontName','Times New Roman','FontSize',12),ylabel('Vertical PGA(Gal)','FontName','Times New Roman','FontSize',12);

在双对数坐标系下有些无法拟合成直线,但如果是画在正常坐标系下就可以,大神们帮解答下啊,谢谢!

vhpga.xls

15.47 KB, 下载次数: 1

最佳答案


TouAkira 发表于 2021-9-25 08:47:23
www520xss 发表于 2021-9-24 12:56
更改后还是有两条不是直线提示说忽略负数
是什么问题呢

唉,你显然没搞清楚,哪些数据构成线性关系。
对数坐标下画直线,需要进行线性拟合的是原数据的对数
而被拟合的因变量不能通过将原数据代入直线方程来求!
p1 = polyfit( log( x1 ), log( y1 ), 1 );
p2 = polyfit( log( x2 ), log( y2 ), 1 );
p3 = polyfit( log( x3 ), log( y3 ), 1 );
y11 = exp( polyval( p1, log( x1 ) ) );
y21 = exp( polyval( p2, log( x2 ) ) );
y31 = exp( polyval( p3, log( x3 ) ) );

5 条回复


TouAkira 发表于 2021-9-24 05:48:39
因为你没排序,横坐标忽小忽大,画出来的当然是一堆折线段了
读取原始数据后先排序
[ x1, index ] = sort( x1 );
y1 = y1( index );
[ x2, index ] = sort( x2 );
y2 = y2( index );
[ x3, index ] = sort( x3 );
y3 = y3( index );

www520xss 发表于 2021-9-24 15:28:23
TouAkira 发表于 2021-9-24 05:48
因为你没排序,横坐标忽小忽大,画出来的当然是一堆折线段了
读取原始数据后先排序
[ x1, index ] = sort(  ...

但为什么拟合出来的不是直线啊?

www520xss 发表于 2021-9-25 00:55:29
www520xss 发表于 2021-9-24 15:28
但为什么拟合出来的不是直线啊?

还是有两条线不是直线
提示是忽略负数
6E`D4T}[MQA1)R($MM}G{2D.png

www520xss 发表于 2021-9-25 00:56:36
TouAkira 发表于 2021-9-24 05:48
因为你没排序,横坐标忽小忽大,画出来的当然是一堆折线段了
读取原始数据后先排序
[ x1, index ] = sort(  ...

更改后还是有两条不是直线提示说忽略负数
是什么问题呢
6E`D4T}[MQA1)R($MM}G{2D.png

TouAkira 发表于 2021-9-25 08:47:23
www520xss 发表于 2021-9-24 12:56
更改后还是有两条不是直线提示说忽略负数
是什么问题呢

唉,你显然没搞清楚,哪些数据构成线性关系。
对数坐标下画直线,需要进行线性拟合的是原数据的对数
而被拟合的因变量不能通过将原数据代入直线方程来求!
p1 = polyfit( log( x1 ), log( y1 ), 1 );
p2 = polyfit( log( x2 ), log( y2 ), 1 );
p3 = polyfit( log( x3 ), log( y3 ), 1 );
y11 = exp( polyval( p1, log( x1 ) ) );
y21 = exp( polyval( p2, log( x2 ) ) );
y31 = exp( polyval( p3, log( x3 ) ) );
回复此楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表