نمایش نتایج 1 تا 40 از 42

نام تاپیک: دلفی و ریاضی

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #5

    نقل قول: دلفی و ریاضی

    - محاسبه ی دترمینان یک ماتریس با هر اندازه ای

    دوره ی دانشجویی ماتریس Sparse رو نوشته بودم و حالا ساده شده ی همون رو براتون می گذارم.
    فرمولی که استفاده شده یک فرمول بازگشتی من درآوردی هست! البته بعد از زیر و رو کردن اینترنت فهمیدم که به فرمول درستی رسیدم:

    Determinant( Matrix[n x n] ) = Sigma[i from 1 to n] { -1^(i +1) * Value[1, i] * Determinant( SubMatrixFrom[1, i] ) }


    کد برنامه رو براتون می گذارم.
    امیدوارم روزی به کار کسی بیاد و ما رو هم دعا کنه!


    type
    TMatrix = array of array of record
    Value: real;
    Flag: integer;
    end;

    function GetMatSize(Matrix: TMatrix): integer;
    var
    i, j: integer;
    begin
    Result := 0;

    for i := 0 to length(Matrix) -1 do
    if Result = 0 then
    for j := 0 to length(Matrix) -1 do
    if Matrix[i, j].Flag = 0 then
    inc(Result);
    end;

    function Determinant(Matrix: TMatrix; yid: integer = 0): real;
    var
    i, j, k, sign: integer;
    begin
    Result := 0;

    if GetMatSize(Matrix) = 1 then
    begin
    for i := 0 to length(Matrix) -1 do
    if Matrix[yid, i].Flag = 0 then
    Break;

    Result := Matrix[yid, i].Value;
    Exit;
    end;

    sign := 1;

    for k := 0 to length(Matrix) -1 do
    Matrix[yid, k].Flag := Matrix[yid, k].Flag +1;

    for j := 0 to length(Matrix) -1 do
    if Matrix[yid, j].Flag = 1 then
    begin
    for k := 0 to length(Matrix) -1 do
    Matrix[k, j].Flag := Matrix[k, j].Flag +1;

    Result := Result + sign * Matrix[yid, j].Value * Determinant(Matrix, yid +1);
    sign := -sign;

    for k := 0 to length(Matrix) -1 do
    Matrix[k, j].Flag := Matrix[k, j].Flag -1;
    end;

    for k := 0 to length(Matrix) -1 do
    Matrix[yid, k].Flag := Matrix[yid, k].Flag -1;
    end;


    مثال:

    procedure TForm1.Button1Click(Sender: TObject);
    var
    n, i, j: integer;
    Mat: TMatrix;
    det: real;
    begin
    n := 3;

    SetLength(Mat, n);
    for i := 0 to length(Mat) -1 do
    begin
    SetLength(Mat[i], n);

    for j := 0 to length(Mat[i]) -1 do
    Mat[i, j].Flag := 0;
    end;

    Mat[0, 0].Value := 1;
    Mat[0, 1].Value := 0;
    Mat[0, 2].Value := 3;

    Mat[1, 0].Value := 4;
    Mat[1, 1].Value := 5;
    Mat[1, 2].Value := 0;

    Mat[2, 0].Value := 7;
    Mat[2, 1].Value := 0;
    Mat[2, 2].Value := 9;

    det := Determinant(Mat);

    ShowMessage(Format('Determinant is %0.3f', [det]));
    end;
    آخرین ویرایش به وسیله یوسف زالی : شنبه 19 اسفند 1391 در 10:47 صبح
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840
    پایگاه داده، تیونینگ، طراحی و پیاده سازی ..

تاپیک های مشابه

  1. ساخت سیستم عامل با دلفی
    نوشته شده توسط amin_omega در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 20
    آخرین پست: سه شنبه 12 بهمن 1400, 12:38 عصر
  2. نوشتن علائم ریاضی دلفی
    نوشته شده توسط mohsenrahx در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 10
    آخرین پست: جمعه 19 مرداد 1386, 04:17 صبح
  3. کامپوننت نوشتن فرمولهای ریاضی در دلفی
    نوشته شده توسط Mohammadi_F در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 6
    آخرین پست: چهارشنبه 23 خرداد 1386, 08:21 صبح
  4. فارسی نوشتن در دلفی
    نوشته شده توسط (امید) در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 11
    آخرین پست: چهارشنبه 18 بهمن 1385, 08:56 صبح
  5. حل یکسری معادلات ریاضی ساده در دلفی
    نوشته شده توسط francosoft در بخش برنامه نویسی در Delphi
    پاسخ: 5
    آخرین پست: یک شنبه 23 اسفند 1383, 15:45 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •