证明,在椭圆形的音乐厅内,从一个椭圆的一个焦点发出声音,则另一个焦点听到的声音是最大的。

分析:证明,从椭圆的一个焦点任意发射的直线经过反射后,并经过另一个焦点。

           画图,过一个焦点随机画一条直线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 编程(椭圆声学原理画图证明,解析几何)的更多相关文章

  1. 数学建模python matlab 编程(疾病传播模型)

    例12:一只游船上有800(1000)人,一名游客不慎患传染病,12(10)小时后有3人发病,由于船上不能及时隔离,问经过60(30)小时,72小时,患此病的人数.(与人口模型和Logistic模型类 ...

  2. 数学建模python matlab 编程(指派问题)

    指派授课问题 现有A.B.C.D四门课程,需由甲.乙.丙.丁四人讲授,并且规定: 每人只讲且必须讲1门课:每门课必须且只需1人讲. 四人分别讲每门课的费用示于表中: 课 费用 人 A B C D 甲 ...

  3. 数学建模python matlab 编程(随机游走问题)

    1 (1). 随机游走问题.在-10到10的一维线段上,质点以1/5的概率用左运动1单位,以2/5的概率停止不动,以2/5的概率向右运动2单位,且碰到-10时向右运动3单位,碰到10时向左运动4单位. ...

  4. 数学建模python matlab 编程(喷泉模拟)

    在无风情况下的喷泉模拟 我的python代码 import numpy as np import random import matplotlib matplotlib.rcParams['font. ...

  5. 在数学建模中学MATLAB

    为期三周的数学建模国赛培训昨天正式结束了,还是有一定的收获的,尤其是在MATLAB的使用上. 1. 一些MATLAB的基础性东西: 元胞数组的使用:http://blog.csdn.net/z1137 ...

  6. 【数学建模】MatLab 数据读写方法汇总

    1.读入 txt 文件数据. load xxx.txt A=load(‘xxx.txt’) A=dlmread(‘xxx.txt’) A=importdata(‘xxx.txt’) 例:将身高体重的 ...

  7. 【数学建模】MATLAB语法

    一.向量.矩阵的表示和使用 format long  %小数很多format short %默认4位小数format rat %显示最近的分数format short e %指数格式的数 尾数多少 e ...

  8. 【数学建模】MATLAB学习笔记——函数式文件

    MATLAB学习笔记——函数式文件 引入函数式文件 说明: 函数式文件主要用于解决计算中的参数传递和函数调用的问题. 函数式的标志是它的第一行为function语句. 函数式文件可以有返回值,也可以没 ...

  9. Matlab 多个版本的安装包下载、安装和激活教程 + 多套数学建模视频教程

    目录 1. 关键词 1.1. 说明 2. 下载地址 2.1. OneDrive高速云盘 2.1.1. 多版本的安装包 2.1.2. 多套数学建模的视频教程 2.2. 百度云 3. 安装教程 1. 关键 ...

随机推荐

  1. Educational Codeforces Round 40 C. Matrix Walk( 思维)

    Educational Codeforces Round 40 (Rated for Div. 2) C. Matrix Walk time limit per test 1 second memor ...

  2. 【CodeForces】915 G. Coprime Arrays 莫比乌斯反演,前缀和,差分

    Coprime Arrays CodeForces - 915G Let's call an array a of size n coprime iff gcd(a1, a2, ..., *a**n) ...

  3. 【洛谷P4430】小猴打架

    题目大意:求带标号 N 个点的生成树个数,两棵生成树相同当且仅当两棵树结构相同且边的生成顺序相同. 题解:学会了 prufer 序列. prufer 序列是用来表示带标号的无根树的序列. 每种不同类型 ...

  4. fiddler save files

    使用fiddler 保存访问到的文件 使用jscript Fiddler Script 是用JScript.NET语言写的 JScript.NET 此语言可以调用C# api 参考地址:http:// ...

  5. Codeforces Round #588 (Div. 2) D. Marcin and Training Camp(思维)

    链接: https://codeforces.com/contest/1230/problem/D 题意: Marcin is a coach in his university. There are ...

  6. 智能指针weak_ptr记录

    智能指针weak_ptr为弱共享指针,实际上是share_ptr的辅助指针,不具备指针的功能.主要是为了协助 shared_ptr 工作,可用来观测资源的使用情况.weak_ptr 只对 shared ...

  7. 简单了解学习PHP(针对前端开发)

    1.服务器(服务器系统) 通常是指较强的计算能力能够同时服务多人的计算机 常见的服务器操作系统: 1.各个版本的Linux操作系统 2.乌班图.centos 3.mac  os(苹果) 4.windo ...

  8. Navicat连接虚拟机上的mysql

    刚刚在虚拟主机上安装mysql,  想使用Navicat 操作mysql.  但是连接不上 报错: 2003 - can't connect to MySQL server on '192.168.1 ...

  9. visualstudio2019 的报表技术rdlc在windows10上出现乱码的问题解决方法

    vs2019 的报表技术rdlc在windows10上出现乱码的问题解决方法 现在好多新电脑默认是安装windows10 可能有些程序员还不习惯,但是这是趋势,windows10以下的系统漏洞很多,这 ...

  10. JVM(十一),垃圾回收之老年代垃圾收集器

    十一.垃圾回收之老年代垃圾收集器 1.Serial Old收集器(标记整理算法-单线程-Client模式下) 2.Paraller Old收集器(标记整理算法-多线程-) 3.CMS收集器(标记清除算 ...