24小时热门版块排行榜    

查看: 624  |  回复: 6
当前主题已经存档。
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

zsh8887985

[交流] 【求助】请教以下为啥出错?

新手,正在学习使用matlib,输入以下代码
>> syms d;
>> light2=@(x,y,d) 75./(4*pi*((x-d).^2+(y-2).^2+9));
>> eqn=@(d) light2(0,0,d)+light2(0,0,10-d)-light2(5,0,d)-light2(5,0,10-d);
>> light2y=@(x,y,d) 75./(4*pi*((x-5).^2+(y-d).^2+9));
>> eqny=@(d) light2y(0,0,d)+light2y(0,0,4-d)-light2y(0,2,d)-light2y(0,2,4-d);
>> dint=fzero(eqny,[0 2])
??? Error using ==> fzero
The function values at the interval endpoints must differ in sign.

但是:
>> dint=fzero(eqn,[0 2])

dint =

    1.4410
我实在搞不懂为什么,请帮忙解答,谢谢谢谢!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zsh8887985

★ ★
sunxiao(金币+2,VIP+0):谢谢分享,欢迎常来 6-6 01:16
我放弃了先前的先求x,再求y的想法。但前提“四个灯泡位置对称安放”不变。

以下是新写的程序:
% define (d,t) as the position of the bulb
syms d; syms t;
illm=0;tillm=0;pd=0;pt=0;
light4=@(x,y,d,t) 100./(4*pi*((x-d).^2+(y-t).^2+9));
[x,y]=meshgrid(0:0.1:10,0:0.1:4);
for d=0:0.1:5
    for t=0:0.1:2
        tillm=min(light4(x,y,d,t)+light4(x,y,10-d,t)+light4(x,y,d,4-t)+light4(x,y,10-d,4-t));
        if illm             illm=tillm;
            pd=d;pt=t;
        end
    end
end

这个是个比较笨的办法,基本就是用了穷举的方法算出来的。有没有更好的办法来解决这个问题,请大家指教。
7楼2009-06-05 09:53:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 7 个回答

hyk2006

木虫 (小有名气)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
sunxiao(金币+2,VIP+0):谢谢参与,欢迎常来仿真模拟版 6-2 02:16
可能是eqny的问题,好好检查看看
2楼2009-06-01 22:33:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sitonyl

铁杆木虫 (文坛精英)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
kuhailangyu(金币+1,VIP+0):感谢参与 6-2 16:51
应该是eqny的问题,这个函数在你给的区间上并没有零点。
zz
3楼2009-06-02 08:12:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zsh8887985


sunxiao(金币+1,VIP+0):鼓励一下 6-4 02:52
谢谢楼上指教。继续请教:

这个问题的来源是解答在10*4*3的房间内确定4个100w灯泡在天花板上的安装位置使得亮度最佳。

我的想法是假设4个灯泡安装位置对称,所以可以先确认在x方向的最佳位置,然后再确认y轴方向的最佳位置,这样得到的(x,y,0)就是灯泡的安装位置。

对亮度最佳的理解是所有选择中最暗的点亮度最大。在x轴方向随着灯泡位置的不同会出现两个暗点,即(0,0)和(5,0),这样可以找到一个零解,x=1.4410.

但y轴方向没有零解,就有问题了!

是不是我的解题思路就是错的?当然,对matlib不熟也是一个原因,不知道如果把x和y同时考虑的方程怎么写。请各位大侠指教。
4楼2009-06-02 16:26:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见