首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用自定义图形用户界面与MATLAB进行交互式曲线拟合?

用自定义图形用户界面与MATLAB进行交互式曲线拟合?
EN

Stack Overflow用户
提问于 2014-08-26 03:35:23
回答 1查看 1.9K关注 0票数 0

我发现例子是证明我的问题的最好方法。我产生了一些数据,添加了一些随机噪声,并使它符合我选择的“生成器”值.

代码语言:javascript
复制
x = linspace(0.01,1,50);
value = 3.82;
y = exp(-value.*x);
y = awgn(y,30);

options = optimset('MaxFunEvals',1000,'MaxIter',1000,'TolFun',1e-10,'Display','off');
model = @(p,x) exp(-p(1).*x);
startingVals = [5];
lb = [1];
ub = [10];
[fittedValue] = lsqcurvefit(model,startingVals,x,y,lb,ub,options)
fittedGraph = exp(-fittedValue.*x);

plot(x,y,'o');
hold on
plot(x,fittedGraph,'r-');

在这个新的例子中,我已经生成了同样的数据,但是这一次给前15个点增加了更多的噪音。因为它是随机的,有时它可以正常工作,但是运行几次之后,我得到了一个很好的例子,说明了我的问题。相同的代码,但在value = 3.82下添加的行除外

代码语言:javascript
复制
y = exp(-value.*x);
y(1:15) = awgn(y(1:15),5);
y(15:end) = awgn(y(15:end),30);

正如你所看到的,它显然不适合数据看起来可靠的地方,因为它是从1-50点开始的。我想要做的是说,好吧,MATLAB,我可以看到我们有一些嘈杂的数据,但在一个范围内似乎不错,只适合你的指数从第15点到最后。我可以回到我的代码,并更新它来做到这一点,但我将批处理拟合这样的图形,其中每一个将有不同范围的‘好’数据。

因此,我想要的是一个GUI回调机制,它允许我从数据中单击两个圆圈,并让它们改变颜色或其他什么,这表明lsqcurvefit只适合这个范围。在内部,它所要改变的就是lsq弧度调用。

x(16:end)y(16:end)

但是范围应该根据我点击的开始和结束的圆圈来更新。

我希望我的问题很清楚。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-26 09:38:10

你可以用金普特来选择两个点作为你的最小和最大的情节。

代码语言:javascript
复制
[x,y]=ginput(2); 
%this returns you the x and y coordinates of two points clicked after each other
%the min point is assumed to be clicked first
min=[x(1) y(1)];
max=[x(2) y(2)];

然后你可以用最小和最大坐标来拟合你的曲线。您还可以切换之间的右击的最小和左键的最大值,等等。

希望这能帮到你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25497628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档