声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1301|回复: 8

[编程技巧] 大侠们帮忙看看这个方程怎么用matlab解

[复制链接]
发表于 2006-10-11 10:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
小妹才接触matlab,可能问的比较白痴,呵呵

syms a b c d;


[a,b,c,d]=solve('-a/b=(b-d)/(a-c)','a^2+b^2=25',...
         '-c/d=(b-d)/(a-c)','c^2+d^2=0.0001');

求 abcd,可这么编运行不出来,能给出实数的数值解就行

多谢
回复
分享到:

使用道具 举报

 楼主| 发表于 2006-10-11 11:43 | 显示全部楼层
大家帮帮忙吧,实在不会啊
发表于 2006-10-11 12:19 | 显示全部楼层
Explicit solution could not be found
可能没有显式解

你确定这个方程组有实数解吗?

高手继续

[ 本帖最后由 toes 于 2006-10-11 12:20 编辑 ]
发表于 2006-10-11 12:37 | 显示全部楼层
solve('-a/b=(b-d)/(a-c)','a^2+b^2=25',...
         '-c/d=(b-d)/(a-c)','c^2+d^2=1')
Warning: Explicit solution could not be found
没有解析解,或者没有实数解!
solve()是用来求方程的解析解或数值解的,这里我感觉应该用fsolve()来求非线性方程组的解!
 楼主| 发表于 2006-10-11 16:29 | 显示全部楼层
这是一个大圆与非常小的圆的公切线,作图能做出来,就应该有解吧

高手们帮看看吧
发表于 2006-10-11 16:46 | 显示全部楼层
午夜流星很早以前写的,可以参考:
  1. function tangency(x1,y1,r1,x2,y2,r2)
  2.   % x1,y1,r1,x2,y2,r2为两圆的圆心坐标与半径
  3.     R=sqrt((y2-y1)^2+(x2-x1)^2); %圆心距
  4.    %外切线
  5.     r0=R*r2/(r1-r2);  %切线与两圆心连线的交点与第个圆心的矢量距离
  6.     syms x y
  7.     [x,y]=solve((y-y2)^2+(x-x2)^2-r0^2,y*(x2-x1)-x*(y2-y1)-x2*y1+x1*y2);% 求解焦点
  8.     a=asin(r2/r0);   %切线与两圆心连线的夹角
  9.     b=atan((y2-y1)/(x2-x1));%两圆心连线与x轴的夹角   
  10.   %画圆
  11.    t=0:0.01:2*pi;
  12.    x11=x1+r1*cos(t);
  13.    y11=y1+r1*sin(t);
  14.    x22=x2+r2*cos(t);
  15.    y22=y2+r2*sin(t);
  16.    plot(x11,y11 ,x22,y22)
  17.    hold on
  18.    % 画切线
  19.    if r1>r2
  20.        xe=x(2);
  21.     ye=y(2);
  22.      xx=double([x1,xe]);
  23.    else
  24.        xe=x(1);
  25.     ye=y(1);
  26.     xx=double([xe,x2]);
  27.     end
  28.   yy1=double(tan(a-b)*(xe-xx)+ye);%两条切线
  29.   yy2=double(tan(-a-b)*(xe-xx)+ye);
  30.   plot(xx,yy1,xx,yy2)
  31.   hold on
  32.   axis equal

  33. %内切线,意义同上
  34.   if  R>=r1+r2
  35.     r0=R*r2/(r1+r2);
  36.     syms x y
  37.     [x,y]=solve((y-y2)^2+(x-x2)^2-r0^2,y*(x2-x1)-x*(y2-y1)-x2*y1+x1*y2);
  38.     a=asin(r2/r0);
  39.     b=atan((y2-y1)/(x2-x1));
  40.     xe=x(1);
  41.     ye=y(1);
  42.      xx=double([x1,x2]);
  43.      yy1=double(tan(a-b)*(xe-xx)+ye);
  44.      yy2=double(tan(-a-b)*(xe-xx)+ye);
  45.      plot(xx,yy1,xx,yy2)
  46.      hold
  47. end
  48.      axis equal
  49.      axis([-2*abs(min(x1-r1,x2-r2)),2*abs(max(x1+r1,x2+r2)),-2*abs(min(y1-r1,y2-r2)),2*abs(max(y1+r1,y2+r2))])
复制代码

评分

1

查看全部评分

发表于 2006-10-11 17:31 | 显示全部楼层
原帖由 bainhome 于 2006-10-11 16:46 发表
午夜流星很早以前写的,可以参考:
function tangency(x1,y1,r1,x2,y2,r2)
  % x1,y1,r1,x2,y2,r2为两圆的圆心坐标与半径
    R=sqrt((y2-y1)^2+(x2-x1)^2); %圆心距
   %外切线
    r0=R*r2/(r1-r2);  %切线 ...


应该是好东西,呵呵。

怀疑楼主的方程给错了。

我试了一下,假设小圆半径0.01,圆心在原点,大圆半径5,圆心在(10,0)。求最上面的外切线。可以得到8个解,其中4个为实数解。结果对不对没有检验,反正有解,呵呵。


  1. syms a b c d;
  2.    
  3. [a,b,c,d]=solve('(a-10)/b=(b-d)/(a-c)','(a-10)^2+b^2=25',...
  4.     '-c/d=(b-d)/(a-c)','c^2+d^2=0.0001')
复制代码


a =

11.827239304683761073493483732969
3.1727606953162389265065162670311
3.1727606953162389265065162670311
11.827239304683761073493483732969
11.833012808658658927228143150412
3.1669871913413410727718568495883
3.1669871913413410727718568495883
11.833012808658658927228143150412



b =

   -4.6541590565234022057016554180170
-4.6487844135234756407054525114233*i
  4.6487844135234756407054525114233*i
    4.6541590565234022057016554180170
    4.6518882234307064910913711426241
  4.6572592845248904647269372164182*i
-4.6572592845248904647269372164182*i
   -4.6518882234307064910913711426241



c =

-.36544786093675221469869674659377e-2
  .13654478609367522146986967465938e-1
  .13654478609367522146986967465938e-1
-.36544786093675221469869674659377e-2
  .36660256173173178544562863008234e-2
-.13666025617317317854456286300823e-1
-.13666025617317317854456286300823e-1
  .36660256173173178544562863008234e-2



d =

   -.93083181130468044114033108360341e-2
-.92975688270469512814109050228465e-2*i
  .92975688270469512814109050228465e-2*i
    .93083181130468044114033108360341e-2
   -.93037764468614129821827422852482e-2
-.93145185690497809294538744328363e-2*i
  .93145185690497809294538744328363e-2*i
    .93037764468614129821827422852482e-2

评分

1

查看全部评分

发表于 2006-10-11 20:51 | 显示全部楼层
从上面的帖子里找,可以找到至少一组实数解,例如[a,b,c,d]=[11.827239304683761073493483732969,-4.6541590565234022057016554180170,-.36544786093675221469869674659377e-2, -.93083181130468044114033108360341e-2]仔细看看,应该还有
 楼主| 发表于 2006-10-11 22:27 | 显示全部楼层
楼上的几位高手们,多谢了

还想问问,能不能只保留对应的实数解

先谢过
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-25 05:25 , Processed in 0.052165 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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