双线性分段曲线拟合

7视图(30天)
马克Cuanan
马克Cuanan 2023年3月6日
评论道: 马修•诺伊 2023年4月4日
有人可以解释如何绘制两个线性线条(Billinear曲线fiiting)现有的曲线?
5个评论
马克Cuanan
马克Cuanan 2023年3月11日
我很抱歉。你有电子邮件吗?

登录置评。

接受的答案

马修•诺伊
马修•诺伊 2023年3月7日
你好
试试这个(一个相当简单的代码)
T1 = readtable (“testdata.xlsx”);
x = T1.Displacement;
y = T1.BaseForce;
%顶部平面曲线(顶点)
(m,补贴)= max (y);
ym = m *的(大小(y));
情节(x, y,“* - - - - - -”,x, ym,‘g’,“线宽”3);
持有
%红色曲线(“黄色”净面积必须是零)
%起源= 0,0(第一个数据点)
x1 = x (1);
日元= y (1);
%让我们找出第二点的曲线让我们找到最小面积
xx = x(1:补贴);
yy = y(1:补贴);
ck = 2:补贴
x2 = x (ck);
y2 = y (ck);
斜率= (y2-y1) / (x2-x1);
yl = y₁+坡* (xx - x1);
%计算黄色区域
(ck) = trapz (xx (yy-yl));
结束
%找到零交叉值(与线性插值)
阈值= 0;
xx_zc = find_zc (xx,阈值);
yy_zc = interp1 (yy, xx xx_zc);
斜率= (yy_zc-y1) / (xx_zc-x1);
yl = y₁+坡* (xx - x1);
情节(xx,黄,“r”,“线宽”3);
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
函数[Zx] = find_zc (x, y,阈值)
%斜率为正“零”交叉检测,使用线性插值
y = y -阈值;
zci = @(数据)找到(diff(符号(数据))> 0);%定义功能:返回+佐的指标
第九= zci (y);%找到+ x的零交叉的指标
ZeroX = @ (x0, y0 (x1, y1) x0——(y0。* (x0 - x1))。/ (y0 - y1);%以内插值替换的x值零交点
Zx = ZeroX (x (ix), y (ix) x(第九+ 1),y(第九+ 1));
结束
6个评论
马修•诺伊
马修•诺伊 2023年3月13日
你好,我的朋友
给你;代码已经升级/扩展到回答你上次的问题
我也发现我犯了一个错误标志时的“净”面积计算。我想删除的蓝色小三角形是错误的标志而不是删除,我添加它。
现在你沸腾红线略微陡峭的斜坡,在我以前的迭代和视觉上你也会看到这两个区域是更好的平衡
这是新的情节要求与交点坐标和面积计算和显示:
代码:
T1 = readtable (“testdata.xlsx”);
x = T1.Displacement;
y = T1.BaseForce;
%顶部平面曲线(顶点)
(m,补贴)= max (y);
ym = m *的(大小(y));
xm = x(补贴);
图(1)
%红色曲线(“黄色”净面积必须是零)
%起源= 0,0(第一个数据点)
x1 = x (1);
日元= y (1);
%让我们找出第二点的曲线让我们找到最小面积
xx = x(1:补贴);
yy = y(1:补贴);
ck = 2:补贴
x2 = x (ck);
y2 = y (ck);
斜率= (y2-y1) / (x2-x1);
yl = y₁+坡* (xx - x1);
%计算黄色区域
(ck) = trapz (xx (yy-yl));
%去除小三角形区域绿线以上
%首先找到交点(红/绿行)坐标
yint = m;%明显
xint = (yint-y1) /坡+ x1;
%的阴谋(xint yint, dk, xx, yl,“r”,“线宽”,1.5);%调试情节
b = xm - xint;%三角形基地
h =黄(结束)- m;%三角形的高度
0.5 (ck) = - * b * h;%的三角形区域(注:必须是一个负数与我的一致
%定义面积= (yy-yl)的积分
%上面写:一个(ck) = trapz (xx (yy-yl));
结束
%的阴谋,在vs迭代索引(循环)
图(2)
图(一);
持有
图();
=——在;%实际上删除额外的三角形面积()
图(一);
传奇(“之前修正”,“在”,一个经过修正的);
%找到零交叉值(与线性插值)
阈值= 0;
xx_zc = find_zc (xx,阈值);
yy_zc = interp1 (yy, xx xx_zc);
斜率= (yy_zc-y1) / (xx_zc-x1);
yl = y₁+坡* (xx - x1);
%在红色和绿色线的交点坐标
阈值= m;
xx_intersect = find_zc (xx, yl、阈值)
yy_intersect = interp1 (xx、yl xx_intersect)
图(1)
情节(x, y,“* - - - - - -”,x, ym,‘g’,“线宽”2);
持有
情节(xint yint,“糖尿病”xx_intersect yy_intersect,“dk”xx公司,“r”,“线宽”2);
文本(1.1 * yy_intersect xx_intersect, (“X相交= 'num2str (xx_intersect)]);
文本(1.05 * yy_intersect xx_intersect, (“Y相交=”num2str (yy_intersect)]);
%显示区域值
%计算黄色区域
Ac = cumtrapz (xx (yy-yl));
%去除小三角形区域绿线以上
b = xm - xx_intersect;%三角形基地
h =黄(结束)- m;%三角形的高度
* b * 0.5 = - h;%的三角形区域(注:必须是一个负数与我的一致
%定义面积= (yy-yl)的积分
Ac = Ac -在;%实际上删除额外的三角形面积()
area_value = interp1 (xx, Ac, xx_zc);%的值是area_value Ac x = xx_zc(点红色的线穿过数据)
文本(xx_zc * 0.4, y1 +坡* (xx_zc * 0.5 - x1), (的面积= 'num2str (area_value“% .2e”)));
文本(yy_intersect xx_intersect * 0.97 * 0.95,的面积= 'num2str (-area_value“% .2e”)));
图(3)% %调试情节给我
%的阴谋(xx_zc area_value, dk, xx, Ac,“r”,“线宽”,2);
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
函数[Zx] = find_zc (x, y,阈值)
%斜率为正“零”交叉检测,使用线性插值
y = y -阈值;
zci = @(数据)找到(diff(符号(数据))> 0);%定义功能:返回+佐的指标
第九= zci (y);%找到+ x的零交叉的指标
ZeroX = @ (x0, y0 (x1, y1) x0——(y0。* (x0 - x1))。/ (y0 - y1);%以内插值替换的x值零交点
Zx = ZeroX (x (ix), y (ix) x(第九+ 1),y(第九+ 1));
结束

登录置评。

更多的答案(4)

马克Cuanan
马克Cuanan 2023年3月7日
请看附带的文档文件。
1评论
马修•诺伊
马修•诺伊 2023年3月7日
你好
见以下我的回答
干杯

登录置评。


马克Cuanan
马克Cuanan 2023年3月13日
你好我的朋友,这是真的有用的。但是,我需要有另一个代码。它是好的,如果我需要你的帮助吗?非常感谢你。请见附加文件。
11日评论
马克Cuanan
马克Cuanan 2023年3月15日
生病送还给你。谢谢你很多

登录置评。



马修•诺伊
马修•诺伊 2023年4月3日
你好
给你
愿一切都好!
这个数据文件的最大值点红色曲线是显示在图
xred_max = 662.0233
yred_max = 15500;
T1 = readtable (“新样品请open.xlsx”);
x = T1.Var3;
y = T1.Var4;
%去除南的
idx = isnan (x);
补贴= isnan (y);
id = idx &补贴;
x (id) = [];
y (id) = [];
%找到最大力量点(顶点)
(m,补贴)= max (y);
%的ym = m *(大小(y));
xm = x(补贴);
%为y创建红色曲线上升到15500人
%起源= 0,0(第一个数据点)
x1 = x (1);
日元= y (1);
%找到最大价值的60%交叉值(与线性插值)
阈值= 0.6 *米;
x_c = find_zc (x, y,阈值);
y_c = interp1 (x, y, x_c);
斜率= (y_c-y1) / (x_c-x1);
yred_max = 15500;
xred_max = x1 + (yred_max-y1) /坡;
xr = linspace (x1 xred_max 10);
年= y₁+坡* (xr - x1);
图(1)
情节(x, y,“* - - - - - -”xr,年“r”,“线宽”2);
文本(yred_max xred_max * 1.01 * 1.01,“X =”num2str (xred_max)' / Y = 'num2str (yred_max)]);
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
函数[Zx] = find_zc (x, y,阈值)
%斜率为正“零”交叉检测,使用线性插值
y = y -阈值;
zci = @(数据)找到(diff(符号(数据))> 0);%定义功能:返回+佐的指标
第九= zci (y);%找到+ x的零交叉的指标
ZeroX = @ (x0, y0 (x1, y1) x0——(y0。* (x0 - x1))。/ (y0 - y1);%以内插值替换的x值零交点
Zx = ZeroX (x (ix), y (ix) x(第九+ 1),y(第九+ 1));
结束
2的评论
马修•诺伊
马修•诺伊 2023年4月4日
你好
我希望我可以再一次,与之前相同的评论,你会如何解决两个未知数的问题只有一个输入?该地区必须是平等的,但这还不够给绿线斜率和起源
我可以简单地决定斜率为零个或你的建议是什么?你是怎么做的excel文件吗?对我来说似乎你只画一条线斜率但你怎么决定?
愿一切都好!

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!