找回密码
 注册
Simdroid-非首页
查看: 143|回复: 10

求方程时遇到 Conversion to double from sym is not possible 的错误

[复制链接]
发表于 2009-5-23 16:18:25 | 显示全部楼层 |阅读模式 来自 北京
本帖最后由 zhaoyan24 于 2009-5-25 09:50 编辑

各位亲爱的大虾!我是matlab编程刚入门的新手,现遇到了非常棘手的问题,就是我在提取一元三次方程解中的实根时遇到了“Conversion to double from sym is not possible“,不知如何解决!请求帮助,不胜感激!程序如下

%其中 t和p是事先赋值好的常量
for i=1:n
    t=b+(i-1)*bc; t=t/Tk;     
    for j=1:nv
        p=p0+(j-1)*pb; p=p/Pk;        %给t和p赋值,t和p是下面一元三次方程中变量v的系数

        syms v        
        f1=sprintf('3*p*v^3-(8*t+p)*v^2+9*v-3=0');
        f1=subs(f1);
        v1=solve(f1,v);                                            %求解方程

        for k=1:length(v1)
            v4(k)=isreal(v1(k));            
            if v4(k)==1
                v3(nv*(i-1)+j)=v1(k,1);                          %提取实根
            else
                v3(nv*(i-1)+j)=0;
            end
        end
        
    end
end
提示错误为“Conversion to double from sym is not possible
Error in ==> state2 at 37     (就是“%提取实根”那一行)
                v3(nv*(i-1)+j)=v1(k,1);
发表于 2009-5-23 16:39:49 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
你回的那个贴子http://forum.simwe.com/thread-809655-1-1.html中已经讲得很清楚了。

能在问问题前先搜索,很好。但搜索到正确信息,却不照着改,就不好了。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-23 16:46:29 | 显示全部楼层 来自 北京
我这个程序只能运行一步,也就是j=1;当j=2就不行了,是怎么回事呢?
是不是我用匿名函数比较好呢?在我的程序中什么地方用?怎么编写呢?谢谢!
回复 不支持

使用道具 举报

发表于 2009-5-23 16:56:28 | 显示全部楼层 来自 浙江杭州
不清楚,要确定是否用匿名函数,首先要知道你的编程目的。

你只把程序代码贴上来了,而没有相关程序说明,谁也不知道你要编一个什么样的程序。

另外,帮人调试是很费时间的,不是所有人都愿意花时间帮人调试的,所以你把代码贴上来,也不要报太大希望一定能解决。

不过,程序调试不太依赖matlab水平,水平不高的,也能调试出来。水平高与不高,只是调试的次数的区别。新手调试次数多了,有经验了,调试速度也会快起来的。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-23 17:00:35 | 显示全部楼层 来自 北京
用了digits、vpa或者double命令后,结果没有一个实根,v3向量全是0,而实际上不是这样的,该怎么办呢?
回复 不支持

使用道具 举报

发表于 2009-5-23 17:11:36 | 显示全部楼层 来自 浙江杭州
哦,这种具体问题还是比较容易回答的。

觉得是你的solve命令没有用对,可能是参数p的值没有传递进去,具体如何传递,可以版内搜索,置顶的FAQ里面也有。

不过,觉得你不是一定要得到符号解,好象得到了符号解,你也要变成数值解。那你还不如用fsolve直接对方程进行数值求解呢。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-23 17:12:38 | 显示全部楼层 来自 北京
我就是想求解一个一元三次方程3px3-(8t+p)x2+9x-3=0的解,并把实根找出来,没有实根就赋0值。
其中程序中是用v代替前面方程中的x。谢谢!
回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-23 17:56:44 | 显示全部楼层 来自 北京
版主教的方法果然很灵!!!我的程序正在运行,没有报错!非常感谢!
已经喜欢上这个论坛了~~~:-)

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-25 09:54:10 | 显示全部楼层 来自 北京
我还有个问题,当循环求解上面方程中遇到Attempt to divide an integer value by an integer divisor of zero .的错误,是怎么回事呢?谢谢!
回复 不支持

使用道具 举报

发表于 2009-5-25 09:58:04 | 显示全部楼层 来自 北京
分母出现0了,检查一下,特殊情况,特殊处理
回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-25 10:10:29 | 显示全部楼层 来自 北京
Warning: List of equations is empty也是在警告分母出现了0吗?我该怎么编写程序让分母一出现0就做其他处理呢?或者用什么办法预先检测出分母等于0呢?谢谢!
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-29 10:17 , Processed in 0.045304 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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