数学建模python matlab 编程(椭圆声学原理画图证明,解析几何)
证明,在椭圆形的音乐厅内,从一个椭圆的一个焦点发出声音,则另一个焦点听到的声音是最大的。
分析:证明,从椭圆的一个焦点任意发射的直线经过反射后,并经过另一个焦点。
画图,过一个焦点随机画一条直线l1,再做它与椭圆的交点,过该点作椭圆的一条切线l2,在作一条与该切线垂直的线l3,再作一条l1关于l3对称的直线l4,然后计算另一个焦点到l4的距离小于一个很小的数即可
我的matlab代码
% 画出一个椭圆
t=linspace(0,2*pi,1000);
A=5;
B=4;
C=3;
X=5*cos(t);
Y=4*sin(t);
plot(X,Y),grid on,hold on;
aa=[-3,3]
bb=[0,0]
plot(aa,bb,'o'),hold on;
axis equal % 随机画出一条直线
k=unifrnd(-10,10);
x0=-3;y0=0;
b=y0-k*x0;
x=-6:6;
y=k*x+b;
plot(x,y),hold on; % 求椭圆和直线的交点
% (m,n)为切点
syms u v
s=solve(u^2/5^2+v^2/4^2==1,v==k*u+b,u,v)
u=double(s.u)
v=double(s.v) if u(1)>u(2)
mx=1
else
mx=2
end % 过(m,n)点求切线
% mx/a? + ny/b? =1
kq=-B*B*(u(mx))/(A*A*v(mx))
bq=B*B/v(mx)
x2=-6:6;
y2=kq*x2+bq;
plot(x2,y2),hold on; % 做一条垂直于切线的线
kq2=-1/kq;
bq2=v(mx)-kq2*u(mx);
y3=kq2*x2+bq2;
plot(x2,y3,'--'),hold on; % 求出一条直线 关于y3这条直线垂直的直线
% 先找到原直线上任意一点
x0=0
y0=k*x0+b; % 找到该点关于直线的对称点
A3=kq2;B3=-1;C3=bq2;
x11 = ((B3*B3-A3*A3)*x0-2*A3*B3*y0-2*A3*C3)/(A3*A3+B3*B3)
y11 = ((A3*A3-B3*B3)*y0-2*A3*B3*x0-2*B3*C3)/(A3*A3+B3*B3)
k4=(y11-v(mx))/(x11-u(mx))
b4=v(mx)-k4*u(mx)
x4=-6:6;
y4=k4*x4+b4;
plot(x11,y11,'o'),hold on;
plot(x0,y0,'o'),hold on;
plot(x4,y4),hold on; % 点到直线y4的距离小于一个很小数
x5=-C;y5=0;
A4=k4;B4=-1;C4=b4;
d = abs(A4*x5+B4*y5+C4)/(sqrt(A4*A4-B4*B4))
d<=0.0000001
再跑个循环,多画几条
% 画出一个椭圆
t=linspace(0,2*pi,1000);
A=5;
B=4;
C=3;
X=5*cos(t);
Y=4*sin(t);
plot(X,Y),grid on,hold on;
aa=[-3,3]
bb=[0,0]
plot(aa,bb,'o'),hold on;
axis equal for tt=1:5
% 随机画出一条直线
k=unifrnd(-10,10);
x0=-3;y0=0;
b=y0-k*x0;
x=-6:6;
y=k*x+b;
plot(x,y),hold on; % 求椭圆和直线的交点
% (m,n)为切点
syms u v
s=solve(u^2/5^2+v^2/4^2==1,v==k*u+b,u,v)
u=double(s.u)
v=double(s.v) if u(1)>u(2)
mx=1
else
mx=2
end % 过(m,n)点求切线
% mx/a? + ny/b? =1
kq=-B*B*(u(mx))/(A*A*v(mx))
bq=B*B/v(mx)
x2=-6:6;
y2=kq*x2+bq;
plot(x2,y2),hold on; % 做一条垂直于切线的线
kq2=-1/kq;
bq2=v(mx)-kq2*u(mx);
y3=kq2*x2+bq2;
plot(x2,y3,'--'),hold on; % 求出一条直线 关于y3这条直线垂直的直线
% 先找到原直线上任意一点
x0=0
y0=k*x0+b; % 找到该点关于直线的对称点
A3=kq2;B3=-1;C3=bq2;
x11 = ((B3*B3-A3*A3)*x0-2*A3*B3*y0-2*A3*C3)/(A3*A3+B3*B3)
y11 = ((A3*A3-B3*B3)*y0-2*A3*B3*x0-2*B3*C3)/(A3*A3+B3*B3)
k4=(y11-v(mx))/(x11-u(mx))
b4=v(mx)-k4*u(mx)
x4=-6:6;
y4=k4*x4+b4;
plot(x11,y11,'o'),hold on;
plot(x0,y0,'o'),hold on;
plot(x4,y4),hold on;
end % 点到直线y4的距离小于一个很小数
x5=-C;y5=0;
A4=k4;B4=-1;C4=b4;
d = abs(A4*x5+B4*y5+C4)/(sqrt(A4*A4-B4*B4))
d<=0.0000001
老师的matlab代码
clear;
a=3;b=2;c=sqrt(a^2-b^2);
%f = @(x) x.^2; %%%%%% 定义函数y=x^2;
f=@(x)b*(1-x.^2.*1/a.^2).^0.5; %%%%%% 定义函数(x^2)/4+(y^2)/9=1;
x=-1*a:0.1:a;
y=f(x);
x1=-1.5;y1=f(x1); %确定出切点
k1=-1*(b^2/a^2)*x1/y1;
A1=atan(k1)*180/pi;
plot(x,y); %画出椭圆的上半段
hold on; f = @(x) k1*(x-x1)+y1;
x=-1*c-1:0.1:x1+2;
y=f(x);
plot(x,y);
hold on; %画出切线 f = @(x) -1*b*(1-x.^2.*1/a.^2).^0.5; %%%%%% 定义函数(x^2)/4+(y^2)/9=1;
x = -1*a:0.1:a;
y = f(x);
plot(x,y);
hold on; %画出椭圆的下半段 plot(-1*c,0,c,0,'.'); %画出两个焦点
hold on;
line([-1*c,x1],[0,y1]);
hold on; %画出左焦点到切点间的直线 x2=-1*c;y2=0;
k2=(y1-y2)/(x1-x2);
A2=atan(k2)*180/pi;
A3=abs(A2-A1);
A4=A1-A3+180;
B4=A4*pi/180;
k4=tan(B4); f = @(x) k4*(x-x1)+y1;
x=x1:0.1:c;
y=f(x);
plot(x,y);
hold on; %画出反射线 axis([-4 4 -3 3])
数学建模python matlab 编程(椭圆声学原理画图证明,解析几何)的更多相关文章
- 数学建模python matlab 编程(疾病传播模型)
例12:一只游船上有800(1000)人,一名游客不慎患传染病,12(10)小时后有3人发病,由于船上不能及时隔离,问经过60(30)小时,72小时,患此病的人数.(与人口模型和Logistic模型类 ...
- 数学建模python matlab 编程(指派问题)
指派授课问题 现有A.B.C.D四门课程,需由甲.乙.丙.丁四人讲授,并且规定: 每人只讲且必须讲1门课:每门课必须且只需1人讲. 四人分别讲每门课的费用示于表中: 课 费用 人 A B C D 甲 ...
- 数学建模python matlab 编程(随机游走问题)
1 (1). 随机游走问题.在-10到10的一维线段上,质点以1/5的概率用左运动1单位,以2/5的概率停止不动,以2/5的概率向右运动2单位,且碰到-10时向右运动3单位,碰到10时向左运动4单位. ...
- 数学建模python matlab 编程(喷泉模拟)
在无风情况下的喷泉模拟 我的python代码 import numpy as np import random import matplotlib matplotlib.rcParams['font. ...
- 在数学建模中学MATLAB
为期三周的数学建模国赛培训昨天正式结束了,还是有一定的收获的,尤其是在MATLAB的使用上. 1. 一些MATLAB的基础性东西: 元胞数组的使用:http://blog.csdn.net/z1137 ...
- 【数学建模】MatLab 数据读写方法汇总
1.读入 txt 文件数据. load xxx.txt A=load(‘xxx.txt’) A=dlmread(‘xxx.txt’) A=importdata(‘xxx.txt’) 例:将身高体重的 ...
- 【数学建模】MATLAB语法
一.向量.矩阵的表示和使用 format long %小数很多format short %默认4位小数format rat %显示最近的分数format short e %指数格式的数 尾数多少 e ...
- 【数学建模】MATLAB学习笔记——函数式文件
MATLAB学习笔记——函数式文件 引入函数式文件 说明: 函数式文件主要用于解决计算中的参数传递和函数调用的问题. 函数式的标志是它的第一行为function语句. 函数式文件可以有返回值,也可以没 ...
- Matlab 多个版本的安装包下载、安装和激活教程 + 多套数学建模视频教程
目录 1. 关键词 1.1. 说明 2. 下载地址 2.1. OneDrive高速云盘 2.1.1. 多版本的安装包 2.1.2. 多套数学建模的视频教程 2.2. 百度云 3. 安装教程 1. 关键 ...
随机推荐
- layui多图上传实现删除功能
在使用layui的多图上传时发现没有删除功能 在网上搜索解决办法时有的感觉太复杂有的不符合自己所需要的所以就自己动手 下面附上代码 HTML: <div class="layui-up ...
- Android之Json
Servlet部分 public class JasonAction extends HttpServlet { private JsonService service; public void do ...
- 使用html2canvas在手机端独立实现h5页面转图片
需求 方便用户把每日消息的海报图片分享到微信朋友圈进行消息扩散 实现方案 使用html2canvas 插件,html2canvas 1.0.0-alpha.11 ,github地址:https://g ...
- SPOJ 10707 COT2 - Count on a tree II
思路 树上莫队的题目 每次更新(u1,u2)和(v1,v2)(不包括lca)的路径,最后单独统计LCA即可 代码 #include <cstdio> #include <cstrin ...
- sentinel.conf 配置
daemonize yes logfile "/home/data/redis/redis_sentinel.log" sentinel monitor mymaster 192. ...
- 多项式乘法(FFT)模板 && 快速数论变换(NTT)
具体步骤: 1.补0:在两个多项式最前面补0,得到两个 $2n$ 次多项式,设系数向量分别为 $v_1$ 和 $v_2$. 2.求值:用FFT计算 $f_1 = DFT(v_1)$ 和 $f_2=DF ...
- MySQL5.7.21解压版安装详细教程(转)
由于本人经常装系统,每次装完系统之后都要重新安装一些软件,安装软件的时候又要上网查找安装的教程,比较麻烦,所以自己整理了MySQL5.7.21解压版的安装方法,以便查看. 1.首先,你要下载MySQL ...
- 第二个爬虫之爬取知乎用户回答和文章并将所有内容保存到txt文件中
自从这两天开始学爬虫,就一直想做个爬虫爬知乎.于是就开始动手了. 知乎用户动态采取的是动态加载的方式,也就是先加载一部分的动态,要一直滑道底才会加载另一部分的动态.要爬取全部的动态,就得先获取全部的u ...
- 使用yum命令出错:SyntaxError: invalid syntax 由于用户取消而退出
详见: https://blog.csdn.net/qq_24880013/article/details/90731617 必须修改的两个yum配置文件: 因为yum使用python2,因此替换为p ...
- 单例模式(Singleton)---创建型
1 单例模式的使用场景 (1)当创建一个对象所占用的资源很多,但同时又需要使用到该对象 (2)当堆系统内的资源要求统一读写时,比如读写的配置信息,此时必须要求创建的实例信息相同 (3)当有多个实例可能 ...