两个图的Matlab解决方案

标签 matlab plot solution equation-solving

我有一个函数 f(t),想得到它与 y=-1 和 y=1 在 0 到 6*pi 范围内相交的所有点。 我冷的唯一方法是绘制它们并尝试定位 f(t) 与 y=1 图相交的 x 轴 pt。但这并没有给我确切的观点。相反,给我一个接近的值(value)。 This is how I am getting the points.

clear;
clc;
f=@(t) (9*(sin(t))/t) + cos(t);
fplot(f,[0 6*pi]);
hold on; plot(0:0.01:6*pi,1,'r-');
         plot(0:0.01:6*pi,-1,'r-');
         x=0:0.2:6*pi; h=cos(x); plot(x,h,':')

最佳答案

您本质上是在尝试求解一个包含两个方程的系统,至少在一般情况下是这样。对于其中一个方程是常数的简单情况,即 y = 1,我们可以使用 fzero 求解。当然,使用图形方式找到一个好的起点总是一个好主意。

f=@(t) (9*(sin(t))./t) + cos(t);
y0 = 1;

这个想法是,如果您想找到两条曲线相交的位置,就是将它们相减,然后寻找所得差异的根。

(顺便说一句,注意我用./做除法,这样MATLAB在f中输入vector或array就不会有问题,这是养成的好习惯。)

请注意,f(t) 在 MATLAB 中并未严格定义为零,因为它的结果为 0/0。 (该功能当然存在限制,可以使用我的 limest 工具进行评估。)

limest(f,0)
ans =
           10

因为我知道解不在 0,所以我将只使用 fzero 边界从那里寻找根。

format long g
fzero(@(t) f(t) - y0,[eps,6*pi])
ans =
          2.58268206208857

但这是唯一的根吗?如果我们有两个或更多的解决方案怎么办?找到一个完全一般函数的所有根可能是一个棘手的问题,因为一些根可能无限靠近,或者可能有无限多个根。

一个想法是使用一种知道如何寻找问题的多种解决方案的工具。同样,在文件交换上找到,我们可以使用research .

y0 = 1;
rmsearch(@(t) f(t) - y0,'fzero',1,eps,6*pi)
ans =
          2.58268206208857
          6.28318530717959
          7.97464518075547
          12.5663706143592
          13.7270312712311

y0 = -1;
rmsearch(@(t) f(t) - y0,'fzero',1,eps,6*pi)
ans =
          3.14159265358979
          5.23030501095915
          9.42477796076938
          10.8130654321854
           15.707963267949
          16.6967239156574

关于两个图的Matlab解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967878/

相关文章:

c++ - 为什么单纯的C++矩阵乘法比BLAS慢100倍?

python - 更新 pyplot.scatter 的位置和颜色

python - matplotlib.pyplot : add horizontal line to sub-plot

c# - 如何以编程方式从 C# 代码构建我的解决方案文件?

visual-studio-2013 - 为什么我的解决方案中的一个项目是粗体的

Linux (Ubuntu 11.10) 中的 Matlab 在绘图中不显示 Unicode(希伯来语)

iphone - 如何使用 MATLAB Mobile 访问 Iphone 相机

python - 使用 Python 的 Popen 类从 Django 调用 Matlab 脚本

r - 在 plot 中控制 xlim

c# - 解决方案加载时的 Visual Studio 加载项 Hook