|
Вопрос # 6 093/ вопрос открыт / |
|
Доброго времени, уважаемый!
Лабораторная работа 10
Определить массу тела в форме куба со стороной L, плотность которого равномерно убывает от центра к краям. В центре куба плотность равна Pc, а на вершинах куба - Pk.
T_____T
 |
Вопрос задал: Александр Думов (статус: Посетитель)
Вопрос отправлен: 22 апреля 2012, 16:13
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Толяныч
Здравствуйте, Александр Думов!
Странно, никто не отвечает...
Я тоже не люблю решать задачи вместо студентов, но эта показалось мне интересной - давно ничего не интегрировал численными методами. Вот что получилось :
Результат работы для А=4, Pmin=1,Pmax=2, Eps= 0.0001
1.5510 0.3553
1.5537 0.0017
1.5544 0.0004
1.5545 0.0001
1.5546 0.0000
Result = 99.4934
Смысл в том, что кубик разбиваем на маленькие кубики, плотность в которых считаем постояннрй и равной плотности в центре кубика. Увеличивая число слоев, уменьшаем тем самым размеры кубика, в пределе получится интеграл по объему. Таким образом получаем средневзвешенную плотность. Умножи ее на объем куба , получаем его массу.
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ComCtrls, ExtCtrls, Math;
-
- type
- TForm1 = class(TForm)
- Memo1: TMemo;
- EdA: TLabeledEdit;
- EdMin: TLabeledEdit;
- EdMax: TLabeledEdit;
- EdEps: TLabeledEdit;
- procedure FormClick(Sender: TObject);
-
- private
- { Private declarations }
- public
-
- end;
- var
- Form1: TForm1 ;
- A,Pmin,Pmax,Eps : double ;
- Grad,x,y,z,dx,dist,V0,V1,Delt,Px : double ;
- NN : integer ;
- implementation
-
- {$R *.dfm}
- procedure TForm1.FormClick(Sender: TObject);
- function FunV ( N : integer) : double ;
- var
- ix,iy,iz : integer ;
- tmp : double ;
- begin
- // DateSeparator := '.' ;
- tmp := 0 ; dx := A / ( N * 4 ) ;
- for ix := 0 to N-1 do
- begin
- x := dx * ( ix * 2 + 1) ;
- for iy := 0 to N-1 do
- begin
- y := dx * ( iy * 2 + 1) ;
- for iz := 0 to N-1 do
- begin
- z := dx * ( iz * 2 + 1) ;
- dist := Sqrt ( x*x + y*y + z*z ) ;
- tmp := tmp + (dist * Grad) + Pmin ;
- end ;
- end ;
- end ;
- Result := tmp * dx * dx * dx;
- end;
- //-----------------
- begin
- A := StrToFloat (EdA.Text) ;
- Pmin := StrToFloat (EdMin.Text) ;
- Pmax := StrToFloat (EdMax.Text) ;
- Eps := StrToFloat (EdEps.Text) ;
- V0 := 1.0 ;
- Grad := (Pmax-Pmin)/(A/2*Sqrt(3)) ;
- NN := 4 ;
- repeat
- V1 := FunV(NN) ;
- Delt := (V1-V0)/V1 ; V0 := V1 ;
- Memo1.Lines.Add( Format('%6.4f %6.4f',[V1,Delt])) ;
- NN := NN + NN ;
- until Delt<Eps ;
- V1 := V1 * A * A * A ;
- Memo1.Lines.Add( Format('Result = %6.4f',[V1])) ;
- end;
-
- end.
-
 |
Ответ отправил: Толяныч (статус: 4-ый класс)
Время отправки: 24 апреля 2012, 16:37
Оценка за ответ: 5
Комментарий к оценке: Спасибо :) Данная задача была задана, по сведениям заказчика, будущим педагогам-математикам. С математикой наверное у них все в порядке, но вот с физикой и с програмированием видимо очень плохо :(
:)
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 25 апреля 2012, 12:18; участников в обсуждении: 1.
|
Толяныч (статус: 4-ый класс), 25 апреля 2012, 00:48 [#1]:
Eps тут - максимально допустимая относительная ошибка. Чем она меньше, тем больше итераций придется выполнить.
|
|
Толяныч (статус: 4-ый класс), 25 апреля 2012, 12:18 [#2]:
Автор обозначился - и исчез. Наверно, в ряды.
Тейлора.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|