Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Метод Эйлера с краевой задачей для решения диф. ур-ий  (Прочитано 7605 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Стася
Постоялец

ru
Offline Offline

« : 28-04-2009 17:46 » 

Сам метод Эйлера у меня есть, я понимаю как прога работает, потому что сама ее делала. Но что значит с краевой задачей? У меня по условию есть хим. реакция:А превращается в Р которое превращается в S.Все эти реакции обратимые. Программа считает концентрацию каждого из веществ в задаваемые промежутки времени. А с краевой задачей это как? Задавать от балды конц. Р и считать все для начального промежутка времени, а потом сверяться, угадали мы конц или нет. Если нет,то осуществлять пересчет. Если не правильно думаю,поправьте пожалуйста.

Код:
unit Unit11;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, Math, TeEngine, Series, ExtCtrls, TeeProcs,
  Chart;

type
  TForm11 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    StringGrid1: TStringGrid;
    Label9: TLabel;
    Edit9: TEdit;
    Label10: TLabel;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Button1: TButton;
    Edit13: TEdit;
    Label14: TLabel;
    Chart1: TChart;
    Series1: TLineSeries;
    Button2: TButton;
    Series2: TLineSeries;
    Series3: TLineSeries;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form11: TForm11;
  a,s,p:real;

implementation

{$R *.dfm}

function RSA(ca,cp:real):real;
Var k1,k3,n1,n3:real;
begin
  k1:=strtofloat(form11.Edit1.text);
  k3:=strtofloat(form11.edit3.text);
  n1:=strtofloat(form11.Edit5.text);
  result:=-k1*power(ca,n1)+k3*power(cp,n3);
end;

function RSS(cp,cs:real):real;
Var k2,n2,k4,n4:real;
begin
  k2:=strtofloat(form11.Edit2.text);
  n2:=strtofloat(form11.Edit6.text);
  k4:=strtofloat(form11.Edit4.text);
  n4:=strtofloat(form11.Edit8.text);
  result:=k2*power(cp,n2)-k4*power(cs,n4);
end;


function RSP(ca,cp,cs:real):real;
Var k1,n1,k3,n3,k4,n4,k2,n2:real;
begin
  k1:=strtofloat(form11.Edit1.text);
  n1:=strtofloat(form11.Edit5.text);
  k3:=strtofloat(form11.Edit3.text);
  n3:=strtofloat(form11.Edit7.text);
  k4:=strtofloat(form11.Edit4.text);
  n4:=strtofloat(form11.Edit8.text);
  k2:=strtofloat(form11.Edit2.text);
  n2:=strtofloat(form11.Edit6.text);
  result:=k1*power(ca,n1)-k3*power(cp,n3)-k2*power(cp,n2)+k4*power(cs,n4);
end;

procedure TForm11.Button1Click(Sender: TObject);
Var ss,a1,s1,dt,endt,t:real;
    i:integer;
begin
a:=strtofloat(edit10.Text);
p:=strtofloat(edit11.Text);
s:=strtofloat(edit12.Text);
dt:=strtofloat(edit9.Text);
endt:=strtofloat(edit13.Text);
ss:=a+p+s;
i:=0;
while t<endt do
begin
  t:=t+dt;
  a1:=a+dt*RSA(a,p);
  s1:=s+dt*RSS(p,s);
  p:=ss-a1-s1;
  a:=a1;
  s:=s1;
  Inc(i);
  Stringgrid1.FixedCols:=0;
  Stringgrid1.ColCount:=4;
  Stringgrid1.RowCount:=100;
  Stringgrid1.Cells[0,0]:='t';
  Stringgrid1.Cells[1,0]:='a';
  Stringgrid1.Cells[2,0]:='p';
  Stringgrid1.Cells[3,0]:='s';
  Stringgrid1.Cells[0,i]:=floattostr(t);
  Stringgrid1.Cells[1,i]:=floattostr(a);
  Stringgrid1.Cells[2,i]:=floattostr(p);
  Stringgrid1.Cells[3,i]:=floattostr(s);
  Chart1.SeriesList[0].AddXY(t,a,'',clblue);
  Chart1.SeriesList[1].AddXY(t,p,'',clgreen);
  Chart1.SeriesList[2].AddXY(t,s,'',clyellow);
end;
end;

procedure TForm11.Button2Click(Sender: TObject);
begin
Chart1.SeriesList[0].Clear;
Chart1.SeriesList[1].Clear;
Chart1.SeriesList[2].Clear;
end;
end.
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 29-04-2009 00:13 » 

А нельзя ли всю задачу целиком посмотреть и полученные уравнения вычисления которых планируется провести?
« Последнее редактирование: 29-04-2009 00:23 от nikedeforest » Записан

ещё один вопрос ...
Стася
Постоялец

ru
Offline Offline

« Ответ #2 : 29-04-2009 13:11 » new

A превращается в Р(константа прямой реакции k1, обратной k2).Р превращается в S(прямой k3,обратной k4).
Скорость этих реакций:
(dc_a)/dt=-k1*c_a^n1+k3*c_p^n3
(dc_p)/dt=k1*c_a^n1-k3*c_p^n3-k2*c_p^n2+k4*c_s^n4
(dc_s)/dt=k2*c_p^n2-k4*c_s^n4
« Последнее редактирование: 29-04-2009 13:13 от Стася » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines