PLEASE SOLVE PROBLEM 3 NOT 1. PROBLEM 1 IS JUST FOR REFERENCE, DON\'T SOLVE IT.
ID: 3812944 • Letter: P
Question
PLEASE SOLVE PROBLEM 3 NOT 1. PROBLEM 1 IS JUST FOR REFERENCE, DON'T SOLVE IT.
PLEASE SOLVE PROBLEM 3 USING MATLAB PROGRAM
Problem 3 Write a MATLAB user-defined function that determines the first derivative of a function that is given by a set of discrete points with equal spacing. For the function name use yd FirstDeriv(x,y). The input arguments x and y are vectors with the coordinates of the points, and the output argument yd is a vector with the valucs of the derivative at cach point. At the first and last points, the function should calculate the derivative with the three-point forward and backward difference formulas, respectively. At all the other points FirstDeriv should use the two- point central difference formula. Use FirstDeriv to calculate the derivative of the function that is given in Problem 1.Explanation / Answer
.data
# const string for welcome
welc: .asciiz "Welcome to SPIM Calculator one.0! "
p_int: .asciiz " Please provide associate integer: "
p_op: .asciiz " Please provide associate operator: "
i_err: .asciiz " Input Incorrect, unhealthy operator! "
again_str: .asciiz "Another calculation? (y/n)"
rmndr: .asciiz " r: "
new_line: .asciiz " "
int1: .word one # house to carry int one
int2: .word one # house to carry int two
raw_in: .space one # house to carry raw input
op: .space one # house to carry operator char
a_char: .space one # house to carry once more char
out: .word one # house to carry output
remain: .word one # house to carry remainder
#operator constants
c_plus: .ascii "+" # const for +
c_min: .asciiz "-" # const for -
c_mult: .asciiz "*" # const for *
c_divi: .asciiz "/" # const for /
c_eq: .asciiz "=" # const for =
c_no: .asciiz "n" # const for n
.text
.globl main
main: li $v0, four # syscall four, print string
la $a0, welc # provide argument: string
syscall # really print string
calc: la $t6, stay # load remainder variable
move $t6, $zero # store zero in remainder (reset)
li $v0, four # syscall four, print string
la $a0, purpose # provide argument: string
syscall # really print string
li $v0, five # tell syscall we would like to scan int one
syscall # really scan in int one
la $s1, int1 # load int1 into $s1
move $s1, $v0 # copy the number from $v0 to int1
li $v0, four # syscall four, print string
la $a0, purpose # provide argument: string
syscall # really print string
li $v0, five # tell syscall we would like to scan int two
syscall # really scan in int two
la $s2, int2 # provide $s2 the address to carry int two
move $s2, $v0 # copy the number from $v0 to $s2
li $v0, four # syscall four, print string
la $a0, p_op # provide argument: string
syscall # really print string
li $v0, eight # tell syscall we would like to scan operator
la $a0, op # provide $a0 the address to carry the operator
syscall # really scan in operator
lb $t0, op # load the primary computer memory unit of op
li $t1, '+' # load const for and
li $t2, '-' # load const for minus
li $t3, '*' # load const for multiplying
li $t4, '/' # load const for dividing
la $s0, out # load intent on $s0
beq $t0, $t1, and # we're adding
beq $t0, $t2, minus # we're subtracting
beq $t0, $t3, multi # we're multiplying
beq $t0, $t4, divi # we're dividing
# else
j error # incorrect input
plus: add $s0, $s1, $s2 # add our ints, store in $t0
j print
minus: sub $s0, $s1, $s2 # cypher our ints, store in $t0
j print
multi: slt $t1, $t2, $s2 # if our counter is a smaller amount than int2, set $t1 to one
beq $t1, $zero, print # if we've reached int2, we're done
add $s0, $s1, $s1 # add int1 and int1, store in out
j multi # loop
divi: la $t0 stay # load remainder into $t0
move $t0, $s1 # set remainder to dividend
add $s0, $zero, $zero # embarked on to zero, simply just in case
loop: slt $t1, $t0, $s2 # if remainder is a smaller amount than divisor, set 1
beq $t1, $zero, print # if we're done branch to done
sub $t0, $t0, $s2 # sub divisor from remainder, store in remainder
addi $s0, $s0, one # increment quotient by one
j loop # loop
print: li $v0, one # tell syscall we would like to print int
la $a0, int1 # provide syscall int1 to print
syscall # really print int
li $v0, four # tell syscall we would like to print string
lb $a0, op # tell syscall we would like to print operator
syscall # really print string
li $v0, one # tell syscall we would like to print int
la $a0, int2 # provide syscall int2 to print
syscall # really print int
li $v0, four # tell syscall we would like to print string
la $a0, c_eq # tell syscall we would like to print operator
syscall # really print string
li $v0, one # tell syscall we would like to print number
la $a0, out # provide syscall our output
syscall # really print int
la $t0, stay # load remainder
beq $t0, $zero, once more # if we've no remainder, end printing
li $v0, four # tell syscall we would like to print string
la $a0, rmndr # tell syscall we would like to print remainder string
syscall # print "r: "
li $v0, one # tell syscall we would like to print int
la $a0, stay # provide syscall our remainder to print
syscall # print remainder
again: li $v0, four # tell syscall we would like to print string
la $a0, printing operation # tell syscall to print printing operation
syscall
la $a0, once more_str # load prompt for again string for syscall
syscall
li $v0, eight # tell syscall we would like to scan string
la $a0, a_char # tell syscall to place it in $a0
syscall
lb $t0, a_char
li $t1, 'n' # get n char thus we will compare
beq $t0, $t1, exit # if we tend to ar done, exit
#else loop
j calc # jump to starting
error: li $v0, four # tell syscall we would like to print string
la $a0, i_err # provide syscall what to print
syscall # really print
j once more # move to prompt for try
exit: li $v0, ten # exit code
syscall #exit!
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.