PDA

View Full Version : سوال: حل چند معادله و چند مجهول توسط دترمینان



.:KeihanCPU:.
یک شنبه 03 خرداد 1388, 19:51 عصر
سلام
دوستان میخوام توسط یه کد یه n معادله و n مجهول را با دترمینان حل کنم.
آیا دوستان میتونن کمکی کنند!؟
با سپاس...

.:KeihanCPU:.
شنبه 09 خرداد 1388, 19:01 عصر
دوستان اگر اطلاعاتی در این زمینه دارن لطفا یاری کنند.
حالا اگر توسط دترمینان هم نبود مشکلی نداره.اگر حل n معادله و n مجهول توسط هر کدی و هر روشی باشه مشکلی نداره

vbhamed
یک شنبه 10 خرداد 1388, 00:28 صبح
سلام

اگر به زبان سي باشه مي توني تبديل كني ؟

.:KeihanCPU:.
یک شنبه 10 خرداد 1388, 16:53 عصر
من سی بلد نیستم
ولی اگر کدشو به سی دارین بذارین ممنون میشم

vbhamed
یک شنبه 10 خرداد 1388, 17:04 عصر
سلام

تبديلش راحته كاري نداره
دستوراتي كه فكر مي كنم لازم باشه، معادلش رو مي گم

آكولادها شروع و پايان بلاك را مشخص مي كنند مثلا شروع و پايان بدنه حلقه For كه در ويژوال بيسيك براي شروع چيزي لازم نيست اما براي پايان از Next، End If، End Sub و ... استفاده مي شود

دستورات Include اول برنامه در بيسيك معادل ندارد و لازم نيست


printf, cprintf : Print

اگر MaxDim = 50 باشه
float m[MaxDim][MaxDim] : Dim m(50, 50) As Single

void PrintMatrix(void) : Sub PrintMatrix()
void main() : تابع شروع برنامه
int i = 0 : Dim i As Integer
scanf("%d", &n) : n = Val(InputBox("Enter n :"))
clrscr() : Cls
getch() : دستوري كه صبر مي كند تا كاربر كليدي بزند
max[i] = 0 : Max(i) = 0
cprintf("%g", x[i]) : Print x(i)

printf("\t") : Print vbTab;
printf("\n\n\n"):Print vbCrlf & vbCrlf & vbCrlf;


اينم خود برنامه




#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

const MaxDim = 50;

float m[MaxDim][MaxDim], m2[MaxDim][MaxDim], max[MaxDim], x[MaxDim];
int n, i, j;

void PrintMatrix(void)
{
printf("\n\n");
textcolor(7);
for(i = 0; i < n; i++)
{
for(j = 0; j <= n; j++)
{
cprintf("%g", m[i][j]);
printf("\t");
}
printf("\n");
}
}

void main()
{
int r = 0, c = 0, r0 = 0, c0 = 0;

for(;;)
{
clrscr();
textcolor(10);
printf("\n");
cprintf(" ************** Equation Solver **************");
printf("\n\n\n\nPlease enter dimansion of equation > 0 : ");

scanf("%d", &n);
if (n > 0)
break;
else
{
textcolor(12);
printf("\n");
cprintf("dimension must be > 0, please Try again... ");
textcolor(15);
getch();
}
}
clrscr();

for(i = 0; i < MaxDim; i++)
for(j = 0; j < MaxDim; j++)
{
max[i] = 0;
x [i] = 0;
m [i][j] = 0;
m2 [i][j] = 0;
}

clrscr();
textcolor(15);
cprintf("Please enter A11 to A%d%d :", n, n);
printf("\n\n");
for(i = 0; i < n; i++)
for(j = 0; j <= n; j++)
{
if (j != n)
{textcolor(10);cprintf("A%d%d = ", i + 1, j + 1);}
else
{textcolor(15);cprintf("Y%d = ", i + 1);}

scanf("%f", &m[i][j]);
if (j == n) printf("\n");
}

clrscr();
textcolor(14);
cprintf("Matrix :");
PrintMatrix();

for(i = 0; i < n; i++)
{
max[i] = m[i][0];

for(j = 0; j <= n; j++)
if (m[i][j] > max[i]) max[i] = m[i][j];

for(j = 0; j <= n; j++)
m2[i][j] = m[i][j] / max[i];
}

for(i = 0; i < n; i++)
for(j = i + 1; j < n; j++)
if (m2[j][0] > m2[i][0])
{
int k, s;
for(k = 0; k <= n; k++)
{
s = m[j][k];
m[j][k] = m[i][k];
m[i][k] = s;

s = m2[j][k];
m2[j][k] = m2[i][k];
m2[i][k] = s;
}
}

for (r0 = 1; r0 <= n - 1; r0++)
{
float zarb;
for(r = r0; r < n; r++)
{
zarb = -m[r][c0];
for(c = c0; c <= n; c++)
m[r][c] = zarb / m[r0-1][c0] * m[r0-1][c] + m[r][c];
}

c0++;
}

float y = 0;
for(i = n - 1; i >= 0; i--)
{
y = 0;
for(j = n - 1; j >= i ; j--)
y += m[i][j] * x[j];

y = m[i][n] - y;
x[i] = y / m[i][i];
}

printf("\n\n************* Answer(s) ************* \n");
for(i = 0; i < n; i++)
{
textcolor(10);
printf("\n");
cprintf("x%d = ", i + 1);
textcolor(15);
cprintf("%g", x[i]);
}

printf("\n\n\n");
textcolor(8);
cprintf("Press any key to exit...");
getch();

}

.:KeihanCPU:.
یک شنبه 10 خرداد 1388, 17:10 عصر
خیلی خیلی ممنون
من که نمیتونم از پس تبدیل این کد بر بیام.اگر خود شما یا کس دیگه ای میتونه این کار رو انجام بده کلی ممنون میشم.
بازم ممنون

Zahed2008
شنبه 21 شهریور 1388, 16:36 عصر
سلام، اين يه كد حل n معادله n مجهول به زبان VB:


Public Function solveAXB(a, b, n, m)
'---- Solve A*X=B ,[m,n]=size(A)
x = b
If n = m Then
If n >= 1 Then
Det = 1
'---------------start--------------------
For ii = 1 To m - 1
ist = ii + 1
'===-----------Check A(ii,ii)#0-----------------
If a(ii, ii) = 0 Then
flag0 = 0
For kk = ii + 1 To m
If a(kk, ii) <> 0 Then
T = b(ii)
b(ii) = b(kk)
b(kk) = T
For jj2 = ii To n
T = a(ii, jj2)
a(ii, jj2) = a(kk, jj2)
a(kk, jj2) = T
Next jj2
flag0 = 1
GoTo lbl1
End If
Next kk
lbl1:
If flag0 = 0 Then '---Sum(A(ii,:))=0
Det = 0
GoTo lbl2
Else
ist = kk + 1
Det = -Det
End If
End If
'===---------------<<start>>----------------------
Det = a(ii, ii) 'Det = Det * a(ii, ii)
If ii = 927 Then
aa = 1
End If
For ii3 = ist To m
If a(ii3, ii) <> 0 Then
fa = -a(ii3, ii) / a(ii, ii)
b(ii3) = b(ii3) + fa * b(ii)
For jj = ii To n
a(ii3, jj) = a(ii3, jj) + fa * a(ii, jj)
Next jj
End If
Next ii3
Next ii
lbl2:
'---------------------------------------
Det = Det * a(m, m)
'+++++++++++solve+++++++++++++++
If Det <> 0 Then
For ii = m To 2 Step -1
For ii3 = ii - 1 To 1 Step -1
If a(ii3, ii) <> 0 Then
fa = -a(ii3, ii) / a(ii, ii)
b(ii3) = b(ii3) + fa * b(ii)
a(ii3, ii) = a(ii3, ii) + fa * a(ii, ii)
End If
Next ii3
Next ii
'@@@@@@@@@@((Result))@@@@@@@@@@@@
For ii = 1 To m
x(ii) = b(ii) / a(ii, ii)
Next ii
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Else
msg = MsgBox("*** Warning: Matrix is singular to working precision. ***", vbOKOnly + vbExclamation, "Warning")
End If
'+++++++++++++++++++++++++++++++
Else
msg = MsgBox("*** Error: Inner matrix dimensions must agree. ***", vbOKOnly + vbCritical, "Error")
End If
Else
msg = MsgBox("*** Error: Matrix must be square. ***", vbOKOnly + vbCritical, "Error")
End If
'=====================================
solveAXB = x
End Function