查看: 3466|回复: 9|关注: 0

[已解决] matlab中定义一个函数,然后画出某个区间的图

[复制链接]

新手

12 麦片

财富积分


050


3

主题

11

帖子

0

最佳答案
  • 关注者: 1
我的代码:我先在编辑器里定义的这个函数

function y=f(x)
if x>0
    y=x.^2;
else
    y=x.^3;
end


然后在命令行窗口输入
>> x=linspace(-4,4,100);
>> y=f(x);
>> plot(x,y)

可是出来的图,明显不对
一直是运算的 是y=x.^3;
而没有分段算。
1、这是为什么,求指点!!
2、可不可以直接在编辑器编号程序,如果可以,应该怎么做?
2018-03-18_195253.png
2018-03-18_194801.png

MATLAB 基础讨论
版块优秀回答者

中级

544 麦片

财富积分


5001500


0

主题

732

帖子

111

最佳答案
  • 关注者: 18
发表于 2018-3-18 20:06:30 | 显示全部楼层 |此回复为最佳答案
在命令窗口输入如下代码:
y=zeros(length(x),1);
for i=1:length(x)
    y(i)=f(x(i));
end
plot(x,y);
有用请支持,正确请设置最优!

MATLAB 基础讨论
版块优秀回答者

中级

544 麦片

财富积分


5001500


0

主题

732

帖子

111

最佳答案
  • 关注者: 18
发表于 2018-3-18 20:08:15 | 显示全部楼层
你的代码出现问题的原因,在于你的函数是应用于标量的。然而你输入的x是一个数组或者向量,所以用for循环来实现不同x值的计算。
请支持我哈!

新手

12 麦片

财富积分


050


3

主题

11

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 2018-3-18 20:17:52 | 显示全部楼层
土木小王子 发表于 2018-3-18 20:08
你的代码出现问题的原因,在于你的函数是应用于标量的。然而你输入的x是一个数组或者向量,所以用for循环来 ...

谢谢,可是我为什么它会一直执行y=x.^3呢?
可以直接在编辑器里写好全部程序吗?

MATLAB 基础讨论
版块优秀回答者

中级

544 麦片

财富积分


5001500


0

主题

732

帖子

111

最佳答案
  • 关注者: 18
发表于 2018-3-18 20:22:23 | 显示全部楼层
hdwhite 发表于 2018-3-18 20:17
谢谢,可是我为什么它会一直执行y=x.^3呢?
可以直接在编辑器里写好全部程序吗? ...

如果x里面的每一个元素都大于0,就会执行y=x.^2.

新手

12 麦片

财富积分


050


3

主题

11

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 2018-3-18 20:25:55 | 显示全部楼层
土木小王子 发表于 2018-3-18 20:22
如果x里面的每一个元素都大于0,就会执行y=x.^2.

可是我之前试过,分别输入x>0/x<0,都是执行的y=x.^3:L

MATLAB 基础讨论
版块优秀回答者

中级

544 麦片

财富积分


5001500


0

主题

732

帖子

111

最佳答案
  • 关注者: 18
发表于 2018-3-18 20:27:43 | 显示全部楼层
hdwhite 发表于 2018-3-18 20:17
谢谢,可是我为什么它会一直执行y=x.^3呢?
可以直接在编辑器里写好全部程序吗? ...

>> y=@(x)x.^2.*(x>0)+x.^3.*(x<=0);
>> x=linspace(-4,4,100);
>> y=y(x);
>> plot(x,y)
这样就可以一次完成了!你验证一下。

论坛优秀回答者

专家

2402 麦片

财富积分


20003000


1

主题

2661

帖子

541

最佳答案
  • 关注者: 94
发表于 2018-3-18 20:30:10 | 显示全部楼层
hdwhite 发表于 2018-3-18 20:17
谢谢,可是我为什么它会一直执行y=x.^3呢?
可以直接在编辑器里写好全部程序吗? ...

新手

12 麦片

财富积分


050


3

主题

11

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 2018-3-18 20:41:28 | 显示全部楼层
土木小王子 发表于 2018-3-18 20:27
>> y=@(x)x.^2.*(x>0)+x.^3.*(x> x=linspace(-4,4,100);
>> y=y(x);
>> plot(x,y)

嗯嗯,可以,谢谢你~~~

MATLAB 基础讨论
版块优秀回答者

中级

544 麦片

财富积分


5001500


0

主题

732

帖子

111

最佳答案
  • 关注者: 18
发表于 2018-3-18 20:45:03 | 显示全部楼层
hdwhite 发表于 2018-3-18 20:41
嗯嗯,可以,谢谢你~~~

有一个小问题,你把@前面的y改成f吧,不是下面求y=y(x)会把函数句柄个覆盖没了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表